209 長度最小的子陣列(已優化)

2021-09-27 03:42:57 字數 1230 閱讀 9830

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

示例:

輸入:s = 7, nums = [2,3,1,2,4,3]輸出:2解釋:子陣列[4,3]是該條件下的長度最小的連續子陣列。
利用滑動視窗,設定左邊界變數l,計算 l 到 i下標之間的陣列元素之和與s比較,若》=s,則記錄min值並繼續前移;若(1)若單個陣列元素》=s,則return 1; (可能出現在陣列的開頭,或最後或任意位置)

(2)如s=7,nums = [-6,1,6],若i=2,此時已結束迴圈,此時須讓 l 繼續前移,直至 l==i;

public int minsubarraylen(int s, int nums) 

int min = 0, l = 0, i = 1;

if (nums[l] >= s) return 1;

while (i < nums.length)

int sum = 0;

for (int j = l; j <= i; j++)

if (sum >= s) else else i++;

continue;}}

return min;

}

缺點:時間複雜度o(n2),當資料量巨大時,sum求和所佔時間很長,耗時高。

利用左右兩個指標變數,起始位置l=0,r= -1;(以r的位置求和,以l的位置相減,確保r遍歷每乙個陣列元素)

(1)若r+1(2)若r到達陣列右端或者sum>=s,則先將sum -=nums[l];再將l++;

(3)求出滿足sum>=s的min值(下標相減即可)

演算法時間複雜度o(n),額外空間複雜度o(1)

209 長度最小的子陣列

給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。示例 輸入 s 7,nums 2,3,1,2,4,3 輸出 2 解釋 子陣列 4,3 是該條件下的長度最小的連續子陣列。高階 如果你已經完成了o n 時間複雜...

209 長度最小的子陣列

給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。示例 輸入 s 7,nums 2,3,1,2,4,3 輸出 2 解釋 子陣列 4,3 是該條件下的長度最小的連續子陣列。高階 如果你已經完成了o n 時間複雜...

209 長度最小的子陣列

給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。示例 輸入 s 7,nums 2,3,1,2,4,3 輸出 2 解釋 子陣列 4,3 是該條件下的長度最小的連續子陣列。高階 如果你已經完成了o n 時間複雜...