Skip to content

Latest commit

 

History

History
38 lines (30 loc) · 1023 Bytes

57 - II. 和为s的连续正数序列.md

File metadata and controls

38 lines (30 loc) · 1023 Bytes

题目链接:

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

思路:

  • 滑动窗口思路,窗口初始化为[1, 2],初始sum3
  • 因为输出的序列至少有2个数,所以若窗口第一个数大于target/2时,就不再继续了
  • sum太小,向窗口添加下一个数,更新sum
  • sum太大,弹出窗口第一个数,更新sum
  • sum===target,则将窗口的数放入res,随后弹出第一个数,继续滑动

代码:

JavaScript

const findContinuousSequence = target => {
  const res = [];
  const window = [1, 2];
  let sum = 3;

  while (window[0] <= target >> 1) {
    if (sum < target) {
      const num = window[window.length - 1] + 1;
      sum += num;
      window.push(num);
    } else if (sum > target) {
      sum -= window.shift();
    } else {
      res.push([...window]);
      sum -= window.shift();
    }
  }
  return res;
};