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

依然是利用滑动窗口解决。

贴一个List的 toArray()方法 和 toArray(T[] a)方法的分析。

https://blog.csdn.net/mucaoyx/article/details/86005283

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

class Solution {
    public int[][] findContinuousSequence(int target) {
        //滑动窗口边界,sum为窗口内数字的和
        int i = 1, j = 2, sum = 3;
        //使用list存储1维数组,方便返回
        List<int[]> res = new ArrayList<>();

        while(i < j){
            if(sum == target){
                //符合条件的序列大小为窗口大小
                int[] ans = new int[j - i + 1];
                for(int k = i; k <= j; k++)
                    ans[k - i] = k;
                res.add(ans);
                //sum -= i;
                //i++;
            }
            //和比目标小,j右移后,sum加上j
            if(sum < target){
                j++;
                sum += j;
            }
            //和比目标大,sum减去当前i,然后i右移
            //因为少了1个数,所以sum总体是减小的
            else{
                sum -= i;
                i++;
            }
        }
        //利用toArray(T[] a)方法返回
        return res.toArray(new int[0][]);
    }
}

 

posted @ 2021-03-26 17:11  星予  阅读(26)  评论(0编辑  收藏  举报