leetcode_209. 長度最小的子陣列

晓枫的春天發表於2024-07-17

題目描述

給定一個含有 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));
    }

相關文章