題目描述
給定一個含有 n
個正整數的陣列和一個正整數 target
。
找出該陣列中滿足其總和大於等於 target
的長度最小的
子陣列
[numsl, numsl+1, ..., numsr-1, numsr]
,並返回其長度。如果不存在符合條件的子陣列,返回 0
。示例 1: 輸入:tokens = ["2","1","+","3","*"] 輸出:9 解釋:該算式轉化為常見的中綴算術表示式為:((2 + 1) * 3) = 9
參考實現
public static int minSubArrayLen(int target, int[] nums) { int left = 0, sum = 0, res = Integer.MAX_VALUE; for (int right = 0; right < nums.length; right++) { //累加陣列元素 sum += nums[right]; //當累加和大於等於 目標值時 while (sum >= target) { //計算 符合條件的陣列長度 res = Math.min(res, right - left + 1); //累加和減去最左邊元素,最左邊索引右移 sum -= nums[left++]; } } return res == Integer.MAX_VALUE ? 0 : res; } public static void main(String[] args) { int[] nums = {2, 3, 1, 2, 4, 3}; System.out.println(minSubArrayLen(7, nums)); }