力扣 560 和為K的子陣列 雜湊

2021-10-06 05:25:03 字數 1295 閱讀 6136

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

輸入:nums = [1,1,1], k = 2

輸出: 2 , [1,1] 與 [1,1] 為兩種不同的情況。

陣列的長度為 [1, 20,000]。

陣列中元素的範圍是 [-1000, 1000] ,且整數 k 的範圍是 [-1e7, 1e7]。

class

solution

:def

subarraysum

(self, nums: list[

int]

, k:

int)

->

int:

res=

0for i in

range

(len

(nums)):

n=0for j in

range

(i,len

(nums)):

n+=nums[j]

if n==k:res+=

1return res

需要找到該陣列中和為 k 的連續的子陣列的個數res

i=0從第乙個元素開始加和,將值作為key儲存在字典d裡,對應的value是key出現的次數。

i==k時,res+=1

i-k in d時,res+=d[i-k],這裡類似兩數之和。

class

solution

:def

subarraysum

(self, nums: list[

int]

, k:

int)

->

int:

d =acc = count =

0for num in nums:

acc += num

if acc == k:

count +=

1if acc - k in d:

count += d[acc-k]

d[acc]

= d.get(acc,0)

+1return count

執行用時 :68 ms, 在所有 python3 提交中擊敗了97.07%的使用者

記憶體消耗 :16 mb, 在所有 python3 提交中擊敗了11.11%的使用者

560 和為K的子陣列 力扣

題意理解 給定乙個陣列,計算連續元素和等於k的個數。注意,元素可能為負,相應的連續和忽大忽小。問題分析 方法1 依次遍歷元素,依次遍歷每個元素所有可能連續和是否k。方法2 連續和看成是從元素0開始的兩個連續和的差值。問題轉化為遍歷每個連續和,如果存在這個連續和 k差值的連續和,那麼存在乙個等於k的連...

力扣 560 和為K的子陣列

給定乙個整數陣列和乙個整數k,你需要找到該陣列中和為k的連續的子陣列的個數。輸入 nums 1,1,1 k 2 輸出 2 1,1 與 1,1 為兩種不同的情況。方法一 字首和 不優化 定義pre i 為 0.i 裡所有數的和,即字首和。you遞推關係得到 pre i pre i 1 nums i 那...

560 和為K的子陣列

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