//滑动窗口
class Solution {
public int[][] findContinuousSequence(int target) {
List<int[]> res = new ArrayList<>();
int i = 1, j = 2, s = 3;
while(i < j) {
if(s == target) {
int[] ans = new int[j - i + 1];
for(int k = i; k <= j; k++) {
ans[k - i] = k;
}
res.add(ans);
}
if (s >= target) {
s -= i;
i++;
}else {
j++;
s += j;
}
}
return res.toArray(new int[res.size()][]);
}
}
class Solution {
public int[][] findContinuousSequence(int target) {
List<int[]> ans = new ArrayList<int[]>();
int l = 1 , r = 2;
while(l < r )
{
int sum = (l + r) * (r - l + 1) / 2;
if (sum < target)
{
r++;
}
else if (sum > target )
{
l++;
}
else
{
int[] tmp = new int[r-l+1];
for(int i = l ; i <= r ;i++)
{
tmp[i-l] = i;
}
ans.add(tmp);
r++; // l++ 和 r++都可以
}
}
return ans.toArray(new int[ans.size()][]);
}
}
func findContinuousSequence(target int) [][]int {
left, right, sum := 1, 1, 0
res := [][]int{}
for left <= target / 2 {
if sum < target {
sum += right
right++
} else {
sum -= left
left++
}
if sum == target {
temp := []int{}
for i := left; i < right; i++ {
temp = append(temp, i)
}
res = append(res, temp)
sum -= left
left++
}
}
return res
}
class Solution {
public int[][] findContinuousSequence(int target) {
List<int[]> res = new ArrayList<>();
int i = 1, j = 1;
int sum = 1;
while(i <= target/2){
if(sum < target){
j++;
sum = sum + j;
}else if(sum > target){
sum = sum - i;
i++;
}else{
int[] temp = new int[j - i + 1];
int index = 0;
for(int k = i; k <= j; k++){
temp[index++] = k;
}
sum = sum - i;
i++;
j++;
sum = sum + j;
res.add(temp);
}
}
return res.toArray(new int[res.size()][]);//转为二维数组
//时间复杂度:O(n)
//空间复杂度:O(1)
}
}
class Solution {
public int[][] findContinuousSequence(int target) {
List<int[]> list = new ArrayList<>();
int i = 1, j = 1;
int sum = 1;
while(i <= target / 2) {
if(sum == target) {
int[] arr = new int[j - i + 1];
for(int k = i, t = 0; k <= j; k ++) {
arr[t ++] = k;
}
sum -= i;
++ i;
++ j;
sum += j;
list.add(arr);
} else if(sum > target) {
sum -= i;
i ++;
} else {
j ++;
sum += j;
}
}
int[][] result = list.toArray(new int[list.size()][]);
return result;
}
}
共以下 17 个回答
c++ 代码> findContinuousSequence(int target) > r; cur;
class Solution {
public:
vector<vector
{
int i=1,j=1,sum=0;
vector<vector
while(i<=target/2)
{
if(sum<target)
{
sum+=j;
j++;
}
else if(sum>target)
{
sum-=i;
i++;
}
else
{
vector
for(int k=i;k<j;k++)
cur.push_back(k);
r.push_back(cur);
sum-=i;
i++;
}
};
“`c++> findContinuousSequence(int target) {> s; temp;
//时间复杂度:O(n)
//空间复杂度:O(1)
class Solution {
public:
vector
vector
int left = 1;
int right = 1;
int sum = 1;
while(left <= target/2){ if(sum < target){ right++; sum += right; } else if(sum > target){
sum -= left;
left++;
}
else{
vector
for(int i = left; i <= right; i++){ temp.push_back(i); } s.push_back(temp); //保存结果后左边界右移 sum -= left; left++; } } return s; } }; ```
时间复杂度:O(n)
class Solution {
public int[][] findContinuousSequence(int target) {
int i = 1, j = 2, s = 3;
List<int[]> res = new ArrayList<>();
while(i < j) {
if(s target) {
int[] ans = new int[j – i + 1];
for(int k = i; k <= j; k++)
ans[k – i] = k;
res.add(ans);
}
if(s >= target) {
s -= i;
i++;
} else {
j++;
s += j;
}
}
return res.toArray(new int[0][]);
//从 }
}
不难,但是要搞清楚细节(是[left,right]还是[left,right))
滑动窗口
以上是代码
7.30
Day21:下面是代码
总和比target小就右边界++,比target大就左边界++