1
+ # from collections import Counter
2
+
3
+ # class Solution(object):
4
+ # def subarraySum(self, nums, k):
5
+ # """
6
+ # :type nums: List[int]
7
+ # :type k: int
8
+ # :rtype: int
9
+ # """
10
+
11
+ # # Edge case
12
+ # if not nums:
13
+ # return 0
14
+
15
+ # # Sliding Window -- No, because the array contains negative number
16
+ # # Dictionary + prefixSum technique
17
+ # subArrayCount, currentSum = 0, 0
18
+ # prefixSumCounter = Counter()
19
+ # prefixSumCounter[0] = 1
20
+ # for num in nums:
21
+ # currentSum += num
22
+ # prefixSum = currentSum - k
23
+ # if prefixSum in prefixSumCounter:
24
+ # subArrayCount += prefixSumCounter[prefixSum]
25
+ # prefixSumCounter[currentSum] += 1
26
+ # return subArrayCount
27
+
28
+
29
+ # # My solution duriing mock
30
+ # # The following solution is basically a slidinng window type solutio which won't work for egative numbers
31
+ # class Solution(object):
32
+ # def subarraySum(self, nums, k):
33
+ # """
34
+ # :type nums: List[int]
35
+ # :type k: int
36
+ # :rtype: int
37
+ # """
38
+ # if len(nums) <= 0:
39
+ # return 0
40
+ # prefixSum = [0] + nums
41
+ # for i in range(1, len(prefixSum)):
42
+ # prefixSum[i] = prefixSum[i - 1] + prefixSum[i]
43
+
44
+ # left, right, subArrayCount = 0, 1, 0
45
+ # while right < len(prefixSum) and left < right:
46
+ # currentSum = prefixSum[right] - prefixSum[left]
47
+ # if currentSum == k:
48
+ # subArrayCount += 1
49
+ # right += 1
50
+ # elif currentSum < k:
51
+ # right += 1
52
+ # else:
53
+ # left += 1
54
+ # return subArrayCount
55
+
56
+
1
57
from collections import Counter
2
58
59
+
3
60
class Solution (object ):
4
61
def subarraySum (self , nums , k ):
5
62
"""
6
63
:type nums: List[int]
7
64
:type k: int
8
65
:rtype: int
9
66
"""
10
-
11
- # Edge case
12
- if not nums :
67
+ if len (nums ) <= 0 :
13
68
return 0
14
69
15
- # Sliding Window -- No, because the array contains negative number
16
- # Dictionary + prefixSum technique
17
- subArrayCount , currentSum = 0 , 0
70
+ prefixSum , currentSum , subArrayCount = 0 , 0 , 0
18
71
prefixSumCounter = Counter ()
19
72
prefixSumCounter [0 ] = 1
20
- for num in nums :
21
- currentSum += num # increment current sum
22
- prefixSum = currentSum - k
23
- if prefixSum in prefixSumCounter : # check if there is a prefix subarray we can take out to reach k
24
- subArrayCount += prefixSumCounter [prefixSum ]
25
- prefixSumCounter [currentSum ] += 1 # add current sum to sum count
26
- return subArrayCount
27
-
28
-
29
-
30
73
74
+ for num in nums :
75
+ currentSum += num
76
+ requiredPrefixSum = currentSum - k
77
+ if requiredPrefixSum in prefixSumCounter :
78
+ subArrayCount += prefixSumCounter [requiredPrefixSum ]
79
+ prefixSumCounter [currentSum ] += 1
31
80
32
- sol = Solution ()
33
- nums = [1 ,1 ,1 ]
34
- k = 2
35
- out = sol .subarraySum (nums , k )
36
- print ("Res: " , out )
81
+ return subArrayCount
0 commit comments