File tree Expand file tree Collapse file tree 4 files changed +70
-1
lines changed
lcof2/剑指 Offer II 010. 和为 k 的子数组 Expand file tree Collapse file tree 4 files changed +70
-1
lines changed Original file line number Diff line number Diff line change 44
44
45
45
<!-- 这里可写通用的实现逻辑 -->
46
46
47
+ 数组中既有正数又有负数,无法使用双指针。可以利用前缀和思想,快速判断子数组的和
48
+
47
49
<!-- tabs:start -->
48
50
49
51
### ** Python3**
50
52
51
53
<!-- 这里可写当前语言的特殊实现逻辑 -->
52
54
53
55
``` 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
55
65
```
56
66
57
67
### ** Java**
58
68
59
69
<!-- 这里可写当前语言的特殊实现逻辑 -->
60
70
61
71
``` 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
+ ```
62
86
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
+ }
63
100
```
64
101
65
102
### ** ...**
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
You can’t perform that action at this time.
0 commit comments