在本題中,我們可以知道,是要求數組中組成和為target的最小子數組的長度。所以,我們肯定可以想到用兩層for循環進行遍歷,然后枚舉所有的結果進行挑選,但這樣時間復雜度過高。
我們可以采用滑動窗口,其實就是雙指針。一個快指針,一個慢指針,二者圍成了一個窗口,符合條件的時候記錄窗口的大小,然后繼續往后移動指針。
我們可以將for循環來控制快指針,也就是右指針,每次它都會向后移動,通過自行定義left指針,當窗口內部的元素和大于等于目標值的時候,我們就需要把左指針向右移動,改變窗口的大小,一直到for循環遍歷結束輸出結果即可。
class Solution {// 滑動窗口public int minSubArrayLen(int s, int[] nums) {int left = 0;int sum = 0;int result = Integer.MAX_VALUE;for (int right = 0; right < nums.length; right++) {sum += nums[right];while (sum >= s) {result = Math.min(result, right - left + 1);sum -= nums[left];left++;}}return result == Integer.MAX_VALUE ? 0 : result;}
}