1. 程式人生 > 實用技巧 >長度最小的子陣列-LeetCode

長度最小的子陣列-LeetCode

題目描述:

給定一個含有n個正整數的陣列和一個正整數s ,找出該陣列中滿足其和 ≥ s 的長度最小的 連續 子陣列,並返回其長度。如果不存在符合條件的子陣列,返回 0。

示例:

  輸入:s = 7, nums = [2,3,1,2,4,3]
  輸出:2
  解釋:子陣列[4,3]是該條件下的長度最小的子陣列。

思路:

  雙指標法,參考官方:https://leetcode-cn.com/problems/minimum-size-subarray-sum/solution/chang-du-zui-xiao-de-zi-shu-zu-by-leetcode-solutio

  雖然自己最初也想到了這種方法,但是程式碼各種bug,花費很長時間才解決,特此記錄一下。

public class Solution {

public int minSubArrayLen(int s,int[] nums){ int startIndex = 0; int Length = Integer.MAX_VALUE; int sum = 0; for (int i = 0; i < nums.length; i++) { sum = sum + nums[i]; if (sum >= s){ Length = i - startIndex + 1<Length?i-startIndex + 1:Length;
for (int j = startIndex; j < i; j++) { if (sum - nums[j] < s) break; sum = sum - nums[j]; startIndex = j + 1;
      
            Length = i - startIndex + 1<Length?i-startIndex + 1:Length;
          }
         }
       }

      return Length == Integer.MAX_VALUE?0:Length;
   }


}