560 和為K的子陣列

2022-05-08 22:18:08 字數 881 閱讀 4233

1.暴力找所有可能的子陣列,n^2個子陣列,最長長度n,則n ^3。

2.n^2解法

從1~n-1各起點開始,一直找到結尾,n^2

class

solution}}

return res;}}

;

或者

儲存前i個元素的和,子陣列共有n^2種,對於i到j的子陣列,可以用sum[j]-sum[i-1]求得,也是n ^2

class

solution

int siz=nums.

size()

,res=0;

vector<

int>

sum(siz,0)

; sum[0]

=nums[0]

;for

(int i=

1;i++i)

for(

int i=

0;i++i)

else

if(i==

0and sum[j]

==k)}}

return res;}}

;

3.o(n)解法,這個我沒想出來,是用雜湊表模擬動態規劃的乙個做法。

建乙個map,i從0到n-1,對於所有從0開始到i的元素和都加入map,鍵為元素和,值為出現次數。

下面考慮任何乙個所求解,假設左邊界i,右邊界j,i到j子陣列的元素和為k。

那麼就有前j項和減前i-1項和等於k,但是對於所有可能的i,j組合還是有n^2種可能。這裡是利用map取指定鍵的對應值時間是o(1)。遍歷到i時,即已經求出前i項元素和所有j(jclass

solution

return res;}}

;

560 和為K的子陣列

題解 1.維護乙個unordered map 字首陣列和,count 2.遍歷陣列的累加和,如果存在sum k,在 unordered map裡面,則有count種情況 複雜度分析 解題思路 一 建立map表用於儲存每個連續子陣列sum求和出現的次數,初始化為 0,1 表示和為0的連續子陣列出現1次...

560 和為K的子陣列

給定乙個整數陣列和乙個整數 k,你需要找到該陣列中和為 k 的連續的子陣列的個數。示例 1 輸入 nums 1,1,1 k 2 輸出 2 1,1 與 1,1 為兩種不同的情況。求的是sum i,j k的個數。這個式子可以進行一些分解 分解1 sum i,j sum i,j 1 nums j k 變成...

560 和為K的子陣列

給定乙個整數陣列和乙個整數 k,你需要找到該陣列中和為 k 的連續的子陣列的個數。示例 1 輸入 nums 1,1,1 k 2 輸出 2 1,1 與 1,1 為兩種不同的情況。說明 陣列的長度為 1,20,000 陣列中元素的範圍是 1000,1000 且整數 k 的範圍是 1e7,1e7 clas...