剑指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)