Leetcode笔记之57和为s的连续正数序列
题目:
输入一个正整数 target
,输出所有和为 target
的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例 1:
输入:target = 9 输出:[[2,3,4],[4,5]]
示例 2:
输入:target = 15 输出:[[1,2,3,4,5],[4,5,6],[7,8]]
解题思路:直接贪心暴力遍历,固定一个左边界1和右边界taget/2,双循环遍历就完事。值得注意的是最开始写完一直告诉我超时,
是有个地方没优化到位,sum>target的时候就不用继续往下累加了,这一点疏忽了导致超时。
C++代码如下:
class Solution {
public:
vector<vector<int>> findContinuousSequence(int target) {
vector<vector<int>> res;
vector<int> x;
int j = 1;
int lim = (target + 1) / 2;
int q;
while(j <= lim)
{
int sum = 0;
for(int i = j ; i <= lim ; i++)
{
sum = sum + i;
if(sum > target)
{
sum = 0;
break;
}
else if(sum == target)
{
q = j;
for(q ; i >= q ; q++)
{
x.push_back(q);
}
res.push_back(x);
x.clear();
}
}
j++;
}
return res;
}
};