長度最小的連續子陣列

2022-02-13 04:39:27 字數 1465 閱讀 5135

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

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

輸出: 2

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

首先這道題最明顯能想到的就是暴力求解,兩個for迴圈,第乙個記錄開始的索引,第二個記錄當大於等於正整數s時的末尾索引,當得到的連續子陣列的總和≥s且長度小於最小值時,更新最小值。

void function(int n, int s, int nums)  else }}

if (min == n + 1) else

}

顯而易見,時間複雜度在o(n^2)量級上;

該方法定義兩個指標,首指標和尾指標,也可以看作是陣列的下標索引(high表示尾指標,對應大的下標索引值;low表示首指標,對應小的索引值。nums[low]~nums[high])。解決的原則是一開始預設為0,當sum(子陣列的總和)小於s時,high向後移動一位(high++)。當sum大於等於s時,判斷當前的長度,如果長度小於最小值,更新最小值,然後low向後移動一位(low++)。直到high跑出陣列外,也就是(high>=n)

}時間複雜度為o(2*n)

完整**:

長度最小的子陣列

方法 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。示例 輸入 s 7,nums 2,3,1,2,4,3 輸出 2 解釋 子陣列 4,3 是該條件下的長度最小的連續子陣列。分析 暴力法 求出每個子陣列的和...