問題:
給定乙個含有 n 個正整數的陣列和乙個正整數 s ,找出該陣列中滿足其和 ≥ s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。
示例:分析:輸入: s = 7, nums = [2,3,1,2,4,3]
輸出: 2
解釋: 子陣列 [4,3] 是該條件下的長度最小的連續子陣列。
暴力法:
求出每個子陣列的和,與目標值進行比較,找到長度最小的子陣列。
暴力法的化簡:public
intminsubarraylen
(int s,
int[
] nums)}}
return min == integer.max_value ?
0: min;
}
暴力法計算時,我們從第乙個元素開始計算子陣列的和,當找第乙個滿足條件的子陣列,開始計算以第二個元素為首的子陣列的和(對於第乙個元素,我們已將找它的滿足條件的最短子陣列)。
例:nums = ,s = 7
以第乙個元素為首的滿足條件的最短子陣列為
以第二個元素為首的滿足條件的最短子陣列為
顯然,在這裡出現會出現重複計算。
此時,我們可以直接將當前的和 sum 減去第乙個元素,從而得到以第二個元素為首的子陣列和 sum,與目標值進行比較:
public
intminsubarraylen
(int s,
int[
] nums)
}return min == integer.max_value ?
0: min;
}
長度最小的子陣列
方法 1 暴力 想法按照題目要求直接求。把所有可能的子陣列求和並更新 textans 直到我們找到最優子陣列且和滿足 text geq textsum s 演算法初始化 text textans int max 用變數 ii 從左到右遍歷陣列 用變數 jj 從當前元素到陣列尾部遍歷 將 ii 到 j...
長度最小的子陣列
給定乙個含有n個正整數的陣列和乙個正整數s 找出該陣列中滿足其和 s的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。示例 輸入 s 7,nums 2,3,1,2,4,3 輸出 2解釋 子陣列 4,3 是該條件下的長度最小的連續子陣列。高階 如果你已經完成了o n 時間複雜度的解法,...
長度最小的子陣列
給定乙個含n個正整數的陣列和乙個正整數s,找出該陣列中滿足其和 s的長度最小的連續子陣列,並返回其長度,如果不存在符合條件的連續子陣列,就返回0。思路 這題也是乙個關於滑動視窗的題。這題是找出其中滿足大於等於的長度,與只等於的解法稍有不同。因為全是正整數,因此我們在向後移動的過程中,sum是乙隻增大...