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;
    }
};
posted @ 2020-03-06 18:01  小辉辉123  阅读(178)  评论(0编辑  收藏  举报