[スライディング ウィンドウ] Jianzhi Offer 57 - II. 合計が s である連続する正の数のシーケンス

正の整数ターゲットを入力し、合計がターゲットとなる連続するすべての正の整数シーケンス (少なくとも 2 つの数値を含む) を出力します。

シーケンス内の数字は小さいものから大きいものへと配置され、最初の数字に従って小さいものから大きなものまで異なるシーケンスが配置されます。

例 1:

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

例 2:

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

制限:

1 <= target <= 10^5

答え:

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;
    }
}

おすすめ

転載: blog.csdn.net/wjavadog/article/details/126443295
おすすめ