[Sliding window] Jianzhi Offer 57 - II. A sequence of continuous positive numbers whose sum is s

Input a positive integer target, and output all consecutive positive integer sequences (contain at least two numbers) whose sum is target.

The numbers in the sequence are arranged from small to large, and different sequences are arranged according to the first number from small to large.

Example 1:

输入:target = 9
输出:[[2,3,4],[4,5]]

Example 2:

输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]

limit:

1 <= target <= 10^5

answer:

class Solution {
    public int[][] findContinuousSequence(int target) {
        
        List<int[]> result = new ArrayList<>();
        int p = 1;
        int q = 2;
        int sum = p+q;
        while (p < q) {
            // 如果sum = target,将p->q的区间放到arr中
            if (sum == target) {
                int[] arr = new int[q-p+1];
                for (int i=p; i<=q; i++) {
                    arr[i-p] = i;
                }
                result.add(arr);
                // p 指针左移
                sum = sum-p;
                p++;
            // 如果sum比target小,p指针不动,q++
            } else if (sum < target) {
                q++;
                sum = sum+q;
            // 如果sum比target大,p指针->
            } else {
                sum = sum - p;
                p++;
            }
        }
        int[][] resultArr = new int[result.size()][];
        for (int i=0;i<result.size();++i) {
            resultArr[i] = result.get(i);
        }
        return resultArr;
    }
}

Guess you like

Origin blog.csdn.net/wjavadog/article/details/126443295