長度最小的子陣列

2021-10-05 02:25:22 字數 928 閱讀 8069

問題:

給定乙個含有 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是乙隻增大...