思路:用map.put(cur_sum, i); 动不动就break
一开始设置end = -1是因为没找到
https://www.geeksforgeeks.org/find-subarray-with-given-sum-in-array-of-integers/
// Java program to print subarray with sum as given sum
import java.util.*;
class GFG {
public static void subArraySum(int[] arr, int n, int sum) {
//cur_sum to keep track of cummulative sum till that point
int cur_sum = 0;
int start = 0;
int end = -1;
HashMap<Integer, Integer> hashMap = new HashMap<>();
for (int i = 0; i < n; i++) {
cur_sum = cur_sum + arr[i];
//check whether cur_sum - sum = 0, if 0 it means
//the sub array is starting from index 0- so stop
if (cur_sum - sum == 0) {
start = 0;
end = i;
break;
}
//if hashMap already has the value, means we already
// have subarray with the sum - so stop
if (hashMap.containsKey(cur_sum - sum)) {
start = hashMap.get(cur_sum - sum) + 1;
end = i;
break;
}
//if value is not present then add to hashmap
hashMap.put(cur_sum, i);
}
// if end is -1 : means we have reached end without the sum
if (end == -1) {
System.out.println("No subarray with given sum exists");
} else {
System.out.println("Sum found between indexes "
+ start + " to " + end);
}
}
// Driver code
public static void main(String[] args) {
int[] arr = {10, 2, -2, -20, 10};
int n = arr.length;
int sum = -10;
subArraySum(arr, n, sum);
}
}