剑指 Offer 57 - II. 和为s的连续正数序列
这里贴的牛客,LeetCode 和牛客会有一丢丢不一样,不过解题思路是一样的。
//滑动窗口法,窗口区间一般规定为 左闭右开,这里也是 import java.util.ArrayList; public class Solution { public ArrayList> FindContinuousSequence(int sum) { //定义一个结果集 ArrayList > res = new ArrayList<>(); //滑动窗口左右边界 int left = 1; int right = 1; //滑动窗口中 数字的和 int curSum = 0; while(left <= sum / 2){ //当前滑动窗口的和 小于 sum,需要增大curSum if(curSum < sum){ curSum = curSum + right; right++; } else if(curSum > sum){ //需要减小curSum curSum = curSum - left; left++; } else { //相等,保存这一序列 ArrayList list = new ArrayList<>(); for(int index = left; index < right;index++){ list.add(index); } res.add(list); //左边界向右移动,找下一个符合条件的序列 curSum = curSum - left; left++; } } return res; } }