給定乙個整數陣列和乙個整數 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 ...