タイトル
正の整数nは正の整数であり、Sの配列を指定し、アレイを満たす最小の長さと≥複数の連続するサブ配列を見つけます。連続サブ配列修飾が存在しない場合は、0が返されます。
例
入力:S = 7、NUMS = [2,3,1,2,4,3 ] 出力: 2 説明:サブアレイ[ 4,3]は、この条件下での連続部分配列の最小の長さです。
問題の解決策
この問題は、サブ・アレイが前方に移動するウィンドウと左ポインタ中のSよりも大きい場合にsが右ポインタを前進させるよりも小さい場合に、スライディングウィンドウを維持する二重ポインタを使用して、両手法を用いて解くことができます。
クラスソリューション{ 公共 のint minSubArrayLen(INT S、INT [] NUMS){ / * スライディングウィンドウを維持するために、両手法を使用して、この問題は、ウィンドウ内のサブ配列とは、以下のより右に移動したとき、Sは、左ポインタを移動させるよりも大きい場合ポインタ * / int型 LEN = nums.length; INT SUM = 0 ; INT左= 0 ; INT右= 0 ; int型の検索結果= nums.length + 1。; 一方(右< LEN){ 一方(SUM <S &&右<LEN ){ // スライディングウィンドウサブアレイと目標値を摺動する右及び右ポインタよりも大きい 和+ =[右] NUMS 右 ++ ; } ながら(SUM> = S){ // ウィンドウサブアレイと目標値以下、右に左ポインタスライドをスライドし、最小長解決 結果= Math.min(その結果、右- ;)左 SUM = - NUMSは、[左]; 左 ++ ; } } 戻り結果を==(+ nums.length 1)0:?検索結果を; // 特別な状況が決定され、そしてsは直接配列全体よりも大きい場合リターン0 } }