Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit c2b22e4

Browse files
Update solution for Subarray Sum Equals K
1 parent 7fc1579 commit c2b22e4

File tree

2 files changed

+19
-44
lines changed

2 files changed

+19
-44
lines changed

‎README.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ Algorithm exercises from LeetCode implemented in Java v11.
101101
### Prefix Sum
102102
- Product of the Last K Numbers | [Problem](https://leetcode.com/problems/product-of-the-last-k-numbers) | [Solution](src/solutions/ProductOfNumbers.java)
103103
- Substrings That Begin and End With the Same Letter | [Problem](https://leetcode.com/problems/substrings-that-begin-and-end-with-the-same-letter) | [Solution](src/solutions/SubstringsWithSameLetter.java)
104+
- Subarray Sum Equals K | [Problem](https://leetcode.com/problems/subarray-sum-equals-k) | [Solution](src/solutions/SubarraySumEqualsK.java)
104105

105106
### Recursion
106107
- Closest Binary Search Tree Value | [Problem](https://leetcode.com/problems/closest-binary-search-tree-value)

‎src/solutions/SubarraySumEqualsK.java‎

Lines changed: 18 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,26 @@
33
import java.util.HashMap;
44
import java.util.Map;
55

6-
// [Problem] https://leetcode.com/problems/subarray-sum-equals-k/
6+
// [Problem] https://leetcode.com/problems/subarray-sum-equals-k
77
class SubarraySumEqualsK {
8+
// Hashmap storing prefix sum
9+
// O(n) time, O(n) space
10+
public int subarraySum(int[] nums, int k) {
11+
int count = 0, sum = 0;
12+
Map<Integer, Integer> sumCounts = new HashMap<>();
13+
sumCounts.put(0, 1);
14+
for (int num : nums) {
15+
sum += num;
16+
if (sumCounts.containsKey(sum - k)) {
17+
count += sumCounts.get(sum - k);
18+
}
19+
int sumCount = sumCounts.getOrDefault(sum, 0);
20+
sumCounts.put(sum, sumCount + 1);
21+
}
22+
return count;
23+
}
824

9-
// test
25+
// Test
1026
public static void main(String[] args) {
1127
SubarraySumEqualsK solution = new SubarraySumEqualsK();
1228

@@ -17,46 +33,4 @@ public static void main(String[] args) {
1733

1834
System.out.println("Test passed? " + (expectedOutput == actualOutput));
1935
}
20-
21-
// Using cumulative sum array - O(n^2) time, O(n) space
22-
public int subarraySumWithArray(int[] nums, int k) {
23-
int result = 0;
24-
int n = nums.length;
25-
26-
int sum = 0;
27-
int[] sums = new int[n + 1];
28-
for (int i = 1; i <= n; i++) {
29-
sum += nums[i - 1];
30-
sums[i] = sum;
31-
}
32-
33-
for (int i = 0; i < n; i++) {
34-
for (int j = i + 1; j < n + 1; j++) {
35-
if (sums[j] - sums[i] == k) {
36-
result++;
37-
}
38-
}
39-
}
40-
41-
return result;
42-
}
43-
44-
// Using cumulative sum hashmap - O(n) time, O(n) space
45-
public int subarraySum(int[] nums, int k) {
46-
int result = 0;
47-
Map<Integer, Integer> sumCounts = new HashMap<>();
48-
sumCounts.put(0, 1);
49-
50-
int sum = 0;
51-
for (int num : nums) {
52-
sum += num;
53-
if (sumCounts.containsKey(sum - k)) {
54-
result += sumCounts.get(sum - k);
55-
}
56-
sumCounts.put(sum, sumCounts.getOrDefault(sum, 0) + 1);
57-
}
58-
59-
return result;
60-
}
61-
6236
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /