Skip to content

Commit 9667385

Browse files
committed
update 560 java
1 parent 318bc02 commit 9667385

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed

leetcode_java/src/main/java/LeetCodeJava/HashTable/SubarraySumEqualsK.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,46 @@ public int subarraySum_0_1(int[] nums, int k) {
171171
return cnt;
172172
}
173173

174+
// V0-2
175+
// IDEA : presum + hashmap
176+
public int subarraySum_0_2(int[] nums, int k) {
177+
178+
if (nums.length == 1){
179+
if (nums[0] == k){
180+
return 1;
181+
}
182+
return 0;
183+
}
184+
185+
int presum = 0;
186+
int cnt = 0;
187+
/**
188+
* map{ presum : cnt}
189+
*/
190+
Map<Integer, Integer> map = new HashMap<>();
191+
// init map as below
192+
map.put(0,1);
193+
194+
for (int i = 0; i < nums.length; i++){
195+
int cur = nums[i];
196+
presum += cur;
197+
/**
198+
* sum(i,j) = presum(j+1) - presum(i)
199+
*
200+
* -> presum(j+1) - presum(i) = k
201+
* -> presum(i) = presum(j+1) - k
202+
*/
203+
if (map.containsKey(presum - k)){
204+
cnt += map.get(presum - k);
205+
}
206+
207+
map.put(presum, map.getOrDefault(presum, 0)+1);
208+
}
209+
210+
return cnt;
211+
}
212+
213+
174214
// V1
175215
// IDEA : HASH MAP
176216
// https://leetcode.com/problems/subarray-sum-equals-k/solutions/6143642/java-beats-9983-by-mohamedhazem3-9yj6/

leetcode_java/src/main/java/dev/workspace6.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,4 +360,54 @@ public boolean checkSubarraySum(int[] nums, int k) {
360360
return false;
361361
}
362362

363+
// LC 560
364+
// https://leetcode.com/problems/subarray-sum-equals-k/description/
365+
// 3.37 - 3.47 pm
366+
/**
367+
* Given an array of integers nums and an integer k,
368+
* return the total number of subarrays whose sum equals to k.
369+
*
370+
* A subarray is a contiguous non-empty
371+
* sequence of elements within an array.
372+
*
373+
* IDEA : presum + hashmap
374+
*/
375+
public int subarraySum(int[] nums, int k) {
376+
377+
if (nums.length == 1){
378+
if (nums[0] == k){
379+
return 1;
380+
}
381+
return 0;
382+
}
383+
384+
int presum = 0;
385+
int cnt = 0;
386+
/**
387+
* map{ presum : cnt}
388+
*/
389+
Map<Integer, Integer> map = new HashMap<>();
390+
// init map as below
391+
map.put(0,1);
392+
393+
for (int i = 0; i < nums.length; i++){
394+
int cur = nums[i];
395+
presum += cur;
396+
/**
397+
* sum(i,j) = presum(j+1) - presum(i)
398+
*
399+
* -> presum(j+1) - presum(i) = k
400+
* -> presum(i) = presum(j+1) - k
401+
*/
402+
if (map.containsKey(presum - k)){
403+
cnt += map.get(presum - k);
404+
}
405+
406+
map.put(presum, map.getOrDefault(presum, 0)+1);
407+
}
408+
409+
return cnt;
410+
}
411+
412+
363413
}

0 commit comments

Comments
 (0)