S スライディング ウィンドウを使用したソード フィンガーの連続した正の数のシーケンス

トピックの説明

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

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

一連の考え

スライディング ウィンドウ
境界条件に注意してください。無視されている点が 2 つあり、100% にはなりません。

  1. while(i <= sum / 2) ; write less = ; したがって、合計が 3 の場合、すべてが飛び出して出力されます。
  2. int i = leftp; i< rightp;i++; write more =; 右ポインタの部分が最初に合計され、次に加算されます。したがって、現時点では、右ポインタは arr の最後の要素を指しません。
import java.util.ArrayList;
public class Solution {
    
    
    public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
    
    
        int leftp = 1;
        int rightp = 1;
        int sum_temp = 0;
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        // 注意这里边界条件
        while(leftp <= sum / 2){
    
    
            if(sum_temp < sum){
    
    
                sum_temp += rightp;
                rightp++;
            }
            else if(sum_temp > sum){
    
    
                sum_temp -= leftp;
                leftp++;
            }
            else{
    
    
                ArrayList<Integer> arr = new ArrayList<>();
                //注意这里边界条件
                for(int i = leftp; i < rightp; i++){
    
    
                    arr.add(i);
                }
                res.add(arr);
                // 左指针右移一位
                sum_temp -= leftp;
                leftp += 1;
            }
        }
        return res;
    }
}

おすすめ

転載: blog.csdn.net/qq_32301683/article/details/108567843
おすすめ