题目链接

思路

使用滑动窗口,并维护变量sum 记录窗口内元素之和,用于与目标比较

当sum比目标小时,窗口右边界向右移动,元素增多,增大sum的值

反之移动左边界,减小sum

  1. /**
  2. * @param {number} target
  3. * @return {number[][]}
  4. */
  5. var findContinuousSequence = function(target) {
  6. let res = [];
  7. //滑动窗口左右界, 闭区间
  8. let left = 1;
  9. let right = 2;
  10. let sum = left+ right; //滑动窗口内所有值的和
  11. while(right < target/2 + 1){
  12. if(sum === target){
  13. res.push(range(left,right));
  14. right++;
  15. sum+=right;
  16. }else if(sum < target){
  17. right++;
  18. sum+=right;
  19. }else if(sum > target){
  20. sum-=left;
  21. left++;
  22. }
  23. }
  24. return res;
  25. };
  26. function range(left,right){
  27. let res = [];
  28. for(let i=left;i<=right;i++){
  29. res.push(i);
  30. }
  31. return res;
  32. }