560 和為K的子陣列

2021-10-25 13:36:43 字數 1031 閱讀 3110

方法一:暴力破解的方法

class

solution

int sum=0;

int count=0;

for(

int i=

0;i}return count;

}}

方法二:字首和+hashmap

解題思路:

建立map表用於儲存每個連續子陣列sum求和出現的次數,初始化為(0,1),表示和為0的連續子陣列出現1次。

sum的值是在對nums陣列的迴圈中不斷累加當前元素的,res的值則需要查詢map中是否已存在sum-k的元素,也就是在查詢此前所有從0項開始累加的連續子項和中有沒有sum-k。

如果有的話,則說明從該項到當前項的連續子陣列和必定為k,那麼res則可以和這個sum的對應值,即這個sum出現的次數,相加得到新的res。

對於當前sum如果已存在與map中則其對應值+1,不存在則新增新項,初始值為1。

class

solution

//第一步,去求字首和

for(

int i=

1;i)//將字首和放到hashmap中去,key為字首和,value為個數

mapmap=

newhashmap

(); map.

put(0,

1);int count=0;

int temp=0;

for(

int i=

0;i) temp=map.

containskey

(nums[i]

)?map.

get(nums[i])+

1:1;

map.

put(nums[i]

,temp);}

return count++;}

}

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...