LeetCode560 和為K的子陣列

2021-10-06 04:12:26 字數 1313 閱讀 5523

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

示例 1 :

輸入:nums =[1

,1,1

], k =

2輸出:2,

[1,1

] 與 [1,

1] 為兩種不同的情況。

說明 :

陣列的長度為 [1,

20,000]。

陣列中元素的範圍是 [

-1000

,1000

] ,且整數 k 的範圍是 [

-1e7

,1e7

]。

用字典sum_dict[val] = i,記錄從左邊元素,累加到第i個元素的和val;

然後,遍歷val_i - val_j = k;且val_i的索引比val_j的索引大的個數。

class

solution

:def

subarraysum

(self, nums: list[

int]

, k:

int)

->

int:

# 找 val_i - val_j == k;i>j;

# 放入dict中查詢

sum_dict =

s =0for i in

range

(len

(nums)):

s += nums[i]

if s in sum_dict:

sum_dict[s]

else

: sum_dict[s]

=[i]

ans =

0for val in sum_dict.keys():

if val == k:

ans +=

len(sum_dict[val])if

(val-k)

in sum_dict.keys():

val_list = sum_dict[val]

val_k_list = sum_dict[val-k]

for i in val_list:

for j in val_k_list:

if i>j:

ans +=

1return ans

leetcode 560 和為k的子陣列

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

LeetCode 560 和為K的子陣列

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

Leetcode 560 和為K的子陣列

560.和為k的子陣列 一開始用的窮舉,超時了 class solution def subarraysum self,nums list int k int int counter 0for i in range len nums sum 0 a i while a len nums 1 sum ...