Leetcode剑指 Offer 57 - II. 和为s的连续正数序列(双指针)
Posted !0 !
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode剑指 Offer 57 - II. 和为s的连续正数序列(双指针)相关的知识,希望对你有一定的参考价值。
题目链接:https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/
解题思路
我们可以维护左右两个边界,记录左右边界中的区间和
s
s
s,使得
s
s
s等于
t
a
r
g
e
t
target
target。如果
s
=
=
t
a
r
g
e
t
s == target
s==target,直接记录
i
i
i到
j
j
j的值;
如果
s
>
=
t
a
r
g
e
t
s >= target
s>=target,
i
i
i往右移,并且
s
s
s减去
i
i
i;
如果
s
<
t
a
r
g
e
t
s < target
s<target,
j
j
j往右移,
s
s
s加上
j
j
j;
代码
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) { //区间和等于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 >= target,i往右移,并且s减去i;
s -= i;
i++;
} else { //如果s < target,j往右移,s加上j;
j++;
s += j;
}
}
return res.toArray(new int[0][]);
}
}
复杂度分析
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)
以上是关于Leetcode剑指 Offer 57 - II. 和为s的连续正数序列(双指针)的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode]剑指 Offer 57 - II. 和为s的连续正数序列
LeetCode剑指offer57 II和为s的连续正数序列(用vector模拟滑动窗口)
[LeetCode]剑指 Offer 32 - II. 从上到下打印二叉树 II