LeetCode209 長度最小的子陣列

2022-06-27 20:12:08 字數 1241 閱讀 4151

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

示例: 

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

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

高階:

如果你已經完成了o(n) 時間複雜度的解法, 請嘗試 o(n log n) 時間複雜度的解法。

//

章節 - 陣列和字串

//四、雙指標技巧

//6.長度最小的子陣列

/*演算法思想:

乙個不高效的解法,需要定義兩個指標left和right,分別記錄子陣列的左右的邊界位置,然後我們讓right向右移,直到子陣列和大於等於給定值或者right達到陣列末尾,此時我們更新最短距離,並且將left像右移一位,然後再sum中減去移去的值,然後重複上面的步驟,直到right到達末尾,且left到達臨界位置,即要麼到達邊界,要麼再往右移動,和就會小於給定值。

*///

演算法實現:

//o(n)

/*class solution

}return res == int_max ? 0 : res;

}};*/

/*演算法思想:

乙個高效的解法,需要用到二分查詢法,思路是,我們建立乙個比原陣列長一位的sums陣列,其中sums[i]表示nums陣列中[0, i - 1]的和,然後我們對於sums中每乙個值sums[i],用二分查詢法找到子陣列的右邊界位置,使該子陣列之和大於sums[i] + s,然後我們更新最短長度的距離即可。

*///

演算法實現:

//o(nlgn)

class

solution , res = len + 1

;

for (int i = 1; i < res; ++i)

sums[i] = sums[i - 1] + nums[i - 1

];

for (int i = 0; i < len + 1; ++i)

return res == len + 1 ? 0

: res;

}int searchright(int left, int right, int key, int sums)

return

left;

}};

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...