力扣209題(長度最小的子陣列)
阿新 • • 發佈:2021-10-10
209、長度最小的子陣列
基本思想:
滑動視窗
具體實現:
1.視窗內是什麼?
視窗內是視窗起始位置和視窗結束位置框住的一段陣列。
2.視窗的起始位置如何移動?
如果當前視窗的值>=s,視窗要縮小,就是起始位置向後移。
3.視窗的結束位置如何移動?
如果當前視窗的值<s,視窗要擴大,就是結束位置向後移。
程式碼:
class Solution { public int minSubArrayLen(int target, int[] nums) { int left = 0;//滑動視窗起始位置指標 int sum = 0;//視窗內元素之和 intresult = Integer.MAX_VALUE; for (int right = 0; right < nums.length; right++){//如果當前視窗的值<s,視窗要擴大,就是結束位置向後移。 sum += nums[right]; while (sum >= target){ result = Math.min(result,right - left + 1);//找長度最小的 sum -= nums[left++];//如果當前視窗的值>=s,視窗要縮小,就是起始位置向後移。} }//如果當前視窗的值<s,視窗要擴大,就是結束位置向後移。 return result == Integer.MAX_VALUE ? 0 : result; } }