【劍指offer】57-2.和爲S的連續正序列

題目描述

輸入一個正整數 target ,輸出所有和爲 target 的連續正整數序列(至少含有兩個數)。

序列內的數字由小到大排列,不同序列按照首個數字從小到大排列。

示例 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) {
        int i = 1; // 滑動窗口的左邊界
        int j = 1; // 滑動窗口的右邊界
        int sum = 0; // 滑動窗口中數字的和
        List<int[]> res = new ArrayList<>();

        while (i <= target / 2) {
            if (sum < target) {
                // 右邊界向右移動
                sum += j;
                j++;
            } else if (sum > target) {
                // 左邊界向右移動
                sum -= i;
                i++;
            } else {
                // 記錄結果
                int[] arr = new int[j-i];
                for (int k = i; k < j; k++) {
                    arr[k-i] = k;
                }
                res.add(arr);
                // 左邊界向右移動
                sum -= i;
                i++;
            }
        }

        return res.toArray(new int[res.size()][]);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章