File tree Expand file tree Collapse file tree 2 files changed +90
-0
lines changed
leetcode_java/src/main/java Expand file tree Collapse file tree 2 files changed +90
-0
lines changed Original file line number Diff line number Diff 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/
Original file line number Diff line number Diff 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}
You can’t perform that action at this time.
0 commit comments