【劍指offer】57 - II. 和爲s的連續正數序列

57 - II. 和爲s的連續正數序列

面試題57 - II. 和爲s的連續正數序列

難度簡單98

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

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

示例 1:

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

示例 2:

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

雙指針

//雙指針
//這類屬於窗口問題,i j分別指向前後 當sum小於target j++ sum大於target i++ 不斷縮減區		間。 time : O(n) space : O(n)
public int[][] findContinuousSequence(int target) {
    if(target<0)    return new int [0][0];
    int i = 1;//慢指針
    int j = 1;//快指針
    int sum = 0;
    List<int []> result = new ArrayList<>();
    while(i<=target/2){
        if(sum<target){//如果小於 j++
            sum+=j;
            j++;
        }else if(sum > target){//如果大於i++ 
            sum-=i;
            i++;
        }else{
            int [] arr = new int [j-i];
            for(int k=i;k<j;k++){
                arr[k-i] = k;
            }
            result.add(arr);
            sum-=i;
            i++;
        }
    } 
    return result.toArray(new int[result.size()][]);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章