乙個陣列中滿足一定約束連續數字個數

2021-09-10 07:13:46 字數 879 閱讀 7138

這是乙個型別題,在leetcode中很常見。這裡只是闡述下思想。

暴力解法一般是o(n2),如果觀察其他大佬的**,發現都使用了個異曲同工的解法。

使用乙個累積運算的變數s,這個變數累積的運算有具體題來決定。

先建立乙個map,一般來說選擇unorder_map,這樣查詢某個元素的複雜度是0(1),(因為這個演算法大部分時間是查詢操作)

那麼遍歷一遍陣列,每一次迴圈要做的事情:

對s進行一次運算

使用運算結果在map中查詢對應元素,並+給結果變數

將map中相應元素++

演算法思想:

對於某種運算(如加法)

當s的值再次出現時,說明這之間的所有值(包括末項,不包括首項)的和為0。

也可以說

當s的值出現時,說明從s==n的元素到當前的元素,中間數字(包括末項,不包括首項)的和為s-n。

對其他運算也可以使用相似的思想。

最後,給乙個例子:

leetcode 566題

給定乙個整數陣列和乙個整數 k,你需要找到該陣列中和為 k 的連續的子陣列的個數。

#include

#include

#include

using namespace std;

intsubarraysum

(vector<

int>

&nums,

int k)

return ans;

}int

main()

;subarraysum

(a,3);

return0;

}

判斷乙個陣列中的數字是否連續

問題描述 乙個陣列中若干個非負整數是否連續,其中0可以代表任何數字 input 1 3 5 0 0 0 6 7 output this array is continue 演算法實現 include using namespace std void sort int a,int m bool fun...

求乙個數字陣列裡的最大連續數字的個數

問題 求乙個數字陣列裡的最大連續數字的個數。比如 3,4,4,4,2,2,3,4 return 3。此題為google的面試題。分析 設定兩個變數 全域性最大連續數字個數 maxsucc 以及區域性連續數字個數 temp。從第二個數字開始,如果當前數字比前乙個數字大1,則 temp 遇到不滿足條件的...

乙個陣列中有乙個數字的次數超過了陣列的一半

問題描述 乙個陣列中有乙個數字的次數超過了陣列的一半,求出這個字元。如 int a 求出超過一半的數字是2。問題分析 方法1 時間複雜度o n 思路 如果乙個數出現的次數超過陣列一半的長度,那麼就是說出現的次數比其他所有數字出現的次數還要多。因此我們可以考慮儲存2個值,乙個是陣列中的乙個數,乙個是數...