Skip to content

Commit b4a00be

Browse files
committed
feat: add solutions to lcof2 problem: No.010
1 parent 8ac1641 commit b4a00be

File tree

4 files changed

+70
-1
lines changed

4 files changed

+70
-1
lines changed

lcof2/剑指 Offer II 010. 和为 k 的子数组/README.md

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,22 +44,59 @@
4444

4545
<!-- 这里可写通用的实现逻辑 -->
4646

47+
数组中既有正数又有负数,无法使用双指针。可以利用前缀和思想,快速判断子数组的和
48+
4749
<!-- tabs:start -->
4850

4951
### **Python3**
5052

5153
<!-- 这里可写当前语言的特殊实现逻辑 -->
5254

5355
```python
54-
56+
class Solution:
57+
def subarraySum(self, nums: List[int], k: int) -> int:
58+
d = defaultdict(int, {0: 1})
59+
ans, sum = 0, 0
60+
for num in nums:
61+
sum += num
62+
ans += d[sum - k]
63+
d[sum] += 1
64+
return ans
5565
```
5666

5767
### **Java**
5868

5969
<!-- 这里可写当前语言的特殊实现逻辑 -->
6070

6171
```java
72+
class Solution {
73+
public int subarraySum(int[] nums, int k) {
74+
Map<Integer, Integer> map = new HashMap<>();
75+
int ans = 0, sum = 0;
76+
map.put(0, 1);
77+
for (int num : nums) {
78+
sum += num;
79+
ans += map.getOrDefault(sum - k, 0);
80+
map.merge(sum, 1, Integer::sum);
81+
}
82+
return ans;
83+
}
84+
}
85+
```
6286

87+
### **Go**
88+
89+
```go
90+
func subarraySum(nums []int, k int) int {
91+
m := map[int]int{0: 1}
92+
sum, ans := 0, 0
93+
for _, num := range nums {
94+
sum += num
95+
ans += m[sum-k]
96+
m[sum]++
97+
}
98+
return ans
99+
}
63100
```
64101

65102
### **...**
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
func subarraySum(nums []int, k int) int {
2+
m := map[int]int{0: 1}
3+
sum, ans := 0, 0
4+
for _, num := range nums {
5+
sum += num
6+
ans += m[sum-k]
7+
m[sum]++
8+
}
9+
return ans
10+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution {
2+
public int subarraySum(int[] nums, int k) {
3+
Map<Integer, Integer> map = new HashMap<>();
4+
int ans = 0, sum = 0;
5+
map.put(0, 1);
6+
for (int num : nums) {
7+
sum += num;
8+
ans += map.getOrDefault(sum - k, 0);
9+
map.merge(sum, 1, Integer::sum);
10+
}
11+
return ans;
12+
}
13+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Solution:
2+
def subarraySum(self, nums: List[int], k: int) -> int:
3+
d = defaultdict(int, {0: 1})
4+
ans, sum = 0, 0
5+
for num in nums:
6+
sum += num
7+
ans += d[sum - k]
8+
d[sum] += 1
9+
return ans

0 commit comments

Comments
 (0)