leetcode209長度最小的子陣列

2021-10-07 14:12:31 字數 1112 閱讀 9936

題目描述:

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

示例:輸入: s = 7, nums = [2,3,1,2,4,3]

輸出: 2

解釋: 子陣列 [4,3] 是該條件下的長度最小的連續子陣列。

題目分析:連續子陣列和問題,兩種思路方案:字首和或者滑動視窗,下面分別貼出

字首和:利用乙個字首陣列來直接計算連續子陣列的和,即sums[i]-sums[j]>=s,又題目中陣列元素均為正數,那麼字首和是乙個遞增陣列,我們已知s和某乙個sums[i],可以利用二分查詢出另乙個sums[j],同時更新最小值。

**:

class

solution

return ans == integer.max_value?

0: ans;

}}

注意arrays.binarysearch方法的返回值,找到就返回位置,找不到返回的是這個元素在原陣列應該插入的位置的負數形式,因此需要處理一下。

滑動視窗:如果視窗中元素和小於s,則不作處理,如果大於等於s了,那麼就將前面的元素不斷刪除,直到小於s,同時記錄過程中視窗值的大小,其實理解為乙個佇列更加容易

以 s = 7, nums = [2,3,1,2,4,3] 為例

22,3

2,3,1

2,3,1,2 > 7 記錄ans=4,並開始出隊,2出->[3,1,2], < 7,停止出隊、

3,1,2,4 > 7記錄ans=4,開始出隊,3出->[1,2,4] ,>=7 ,記錄ans = 3,繼續出隊,1出->[2,4],<7停止

[2,4,3] > 7, 記錄ans=3,出隊,2出->[3,4] ,>= 7,記錄ans = 2,繼續出隊,3出->[4],<7,停止

此時陣列元素已經全部處理完,演算法停止,ans = 2.

**:

class

solution

}return ans == integer.max_value?

0: ans;

}}

leetcode 209 長度最小的陣列

題目描述 給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。參考 負雪明燭 class solution object def minsubarraylen self,s,nums type s int ty...

LeetCode 209 長度最小的子陣列

題目鏈結 題目描述 給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。示例輸入 s 7,nums 2,3,1,2,4,3 輸出 2 解釋 子陣列 4,3 是該條件下的長度最小的連續子陣列。解決方法 兩種方法 ...

Leetcode209 長度最小的子陣列

給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。示例 輸入 s 7,nums 2,3,1,2,4,3 輸出 2 解釋 子陣列 4,3 是該條件下的長度最小的連續子陣列。public intminsubarr...