演算法 長度最小的子陣列

2021-09-30 18:37:58 字數 1922 閱讀 5612

長度最小的子陣列

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

示例:

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

輸出: 2

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

高階:如果你已經完成了o(n) 時間複雜度的解法, 請嘗試 o(n log n) 時間複雜度的解法。

第一版本:有問題的版本
class solution 

int maxnumber = 0;

int maxnumindex = 0;

int total = 0;

int length = nums.length;

for (int i = 0; i < length; i++)

total += nums[i];

}if (total < s)else if (maxnumber >= s)

int min = 0;

total = 0;

int lenghth1 = 0;

// 從 maxindex 往後遍歷

for (int number = maxnumindex; number < length ; number++)

}total = 0;

int lenghth2 = 0;

// 從 maxindex 向前遍歷

for (int number = maxnumindex; number >=0 ; number--)

}int lenghth3 = 0;

if (maxnumindex != 0 && maxnumindex != length -1) }}

return min;

}}

當時我的想法是:找到最大的那個數,要找的和肯定是最大的數組成的子陣列長度比較小。後來忘了,如果說,該數很大,但是周圍都是1,也比不過其他比他小,但是周圍都是同等大的數。比如:1,1,1,23,1,1,1,1,18,18,18.

第二版:實在想不出來方法,就用迴圈遍歷去做吧。

class solution 

int maxnumber = 0;

int total = 0;

int length = nums.length;

for (int i = 0; i < length; i++)

total += nums[i];

}if (total < s)else if (maxnumber >= s)

int mincont = 0;

for (int i = 0; i < length; i++) }}

return ++mincont;}

}

肯定有很多重複遍歷。

網上最快的方法:

class solution 

int i = 0, j = 0;

int sum = 0, minlen = integer.max_value;

while (j < nums.length)

while (sum >= s)

minlen = math.min(minlen, j - i + 1);

}return (minlen == integer.max_value) ? 0 : minlen;

}}

1.感覺自己解決問題的思路,還是有很多的可以提高的地方。

2.之前練習的演算法題,要時常回顧。現在發現,讓自己現在去在腦海裡做,

思路都不是很明確。這樣不行。

3.自己想到的一些情況,也要**去處理,而不是有特殊情況,自己直到,但是什麼也沒有做。

應該寫**處理這些特殊情況。

加油,少年。

演算法 長度最小的子陣列

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

長度最小的子陣列

方法 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 時間複雜度的解法,...