DHU高级程序设计-leetcode刷题剑指 Offer 57 - II. 和为s的连续正数序列
程序员文章站
2024-02-04 08:31:10
...
剑指 Offer 57 - II. 和为s的连续正数序列
题目描述:
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例一:
输入:target = 9
输出:[[2,3,4],[4,5]]
示例二:
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
限制:1 <= target <= 10^5
思路:评论区思路-滑动窗口
分别定义一个左右指针,不断移动右指针,sum做累加,当sum==target时,把窗口l-r之间的数值入vector并存入结果数组;当sum>target值时,sum-l值,l向右移动一个。
代码:
class Solution {
public:
vector<vector<int>> findContinuousSequence(int target) {
int l,r,sum;
vector<vector<int>> res;
for(r=1,l=1,sum=0;r<target;r++)
{
sum+=r;
while(sum>target)
{
sum-=l;
l++;
}
if(sum==target)
{
vector<int> nums;
for(int i=0;i<r-l+1;i++)
nums.push_back(l+i);//注意:此时入组的值要记得加l指向的开始位置
res.push_back(nums);
}
}
return res;
}
};
上一篇: DHU高级程序语言设计-leetcode刷题148排序链表
下一篇: 陶陶摘苹果