給定乙個含有n個正整數的陣列和乙個正整數s ,找出該陣列中滿足其和≥ s的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。
示例:
輸入:利用滑動視窗,設定左邊界變數l,計算 l 到 i下標之間的陣列元素之和與s比較,若》=s,則記錄min值並繼續前移;若(1)若單個陣列元素》=s,則return 1; (可能出現在陣列的開頭,或最後或任意位置)s = 7, nums = [2,3,1,2,4,3]
輸出:2解釋:子陣列[4,3]
是該條件下的長度最小的連續子陣列。
(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 時間複雜...