Skip to content

Commit 318bc02

Browse files
committed
update 523 java
1 parent 3fb8469 commit 318bc02

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ public boolean checkSubarraySum(int[] nums, int k) {
7676
presum += nums[i];
7777

7878
// Calculate remainder
79+
/**
80+
* NOTE:
81+
* handle edge case : if k = 0
82+
*/
7983
int remainder = (k != 0) ? presum % k : presum;
8084

8185
// If the remainder already exists in the map
@@ -158,6 +162,37 @@ public boolean checkSubarraySum_0_1(int[] nums, int k) {
158162
return false;
159163
}
160164

165+
// V0-2
166+
// IDEA : presum + hashmap
167+
public boolean checkSubarraySum_0_2(int[] nums, int k) {
168+
169+
if (nums.length < 2) {
170+
return false;
171+
}
172+
173+
Map<Integer, Integer> map = new HashMap<>();
174+
// NOTE!! init as below
175+
map.put(0, -1);
176+
177+
int preSum = 0;
178+
for (int i = 0; i < nums.length; i++) {
179+
int cur = nums[i];
180+
/**
181+
* NOTE:
182+
* handle edge case : if k = 0
183+
*/
184+
preSum = k != 0 ? (preSum + cur) % k : preSum;
185+
if (map.containsKey(preSum)) {
186+
if (i - map.get(preSum) >= 2) {
187+
return true;
188+
}
189+
} else {
190+
map.put(preSum, i);
191+
}
192+
}
193+
return false;
194+
}
195+
161196

162197
// V1
163198
// IDEA : HASHMAP

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

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,4 +320,44 @@ private Integer[] createPreSumArr(int[] input, int n){
320320
return res;
321321
}
322322

323+
// LC 523
324+
// https://leetcode.com/problems/continuous-subarray-sum/
325+
// 3.11 pm - 3.20 pm
326+
/**
327+
* idea : presum + hashmap
328+
*
329+
*/
330+
public boolean checkSubarraySum(int[] nums, int k) {
331+
332+
if (nums.length < 2){
333+
return false;
334+
}
335+
336+
Map<Integer, Integer> map = new HashMap<>();
337+
// NOTE!! init as below
338+
map.put(0, -1);
339+
340+
int preSum = 0;
341+
for(int i = 0; i < nums.length; i++){
342+
int cur = nums[i];
343+
// int remainder = (k != 0) ? presum % k : presum;
344+
preSum = k != 0 ? (preSum + cur) % k : preSum; // edge case : if k = 0
345+
/**
346+
* sum(i,j) = presum(j+1) - presum(i)
347+
*
348+
* -> sum(i,j) = a * k + r - b * k + r
349+
* ->
350+
*
351+
*/
352+
if (map.containsKey(preSum)){ // TODO : double check
353+
if (i - map.get(preSum) >= 2){
354+
return true;
355+
}
356+
}
357+
map.put(preSum, i);
358+
}
359+
360+
return false;
361+
}
362+
323363
}

0 commit comments

Comments
 (0)