給定乙個含有 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...