剑指Offer 57II - 和为S的连续正数序列

力扣链接:https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/

题目描述

输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。

序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

 

思路:滑动窗口

和小于target则向右扩大窗口,大于target则从左侧缩小窗口。

代码:

/**
 * @param {number} target
 * @return {number[][]}
 */
var findContinuousSequence = function(target) {
    if(target < 3) return [];
    
    let res = [];
    let cur = [1,2];
    let sum = 3;
    while(cur[0] < target/2){
        let curTail = cur[cur.length-1];
        if(sum === target){
            res.push([...cur]);
            sum -= cur.shift();
        }else if(sum < target){
            cur.push(curTail + 1);
            sum += curTail + 1;
        }else{
            sum -= cur.shift();
        }
    }
    
    return res;
};

时间复杂度:O(N)

空间复杂度:O(1)

posted @ 2020-07-13 23:02  studystudyxinxin  阅读(97)  评论(0编辑  收藏  举报