此题两种做法,暴力做法n方,如下注释部分,但当中还是有两个coner case没想到,只有一个0,和数组当中出现一个0
优化的方法是用map,先sum = nums[i] + sum; 再if (map.containsKey(sum)) ,这个当中的思维,算是技巧,也是基本功。
/**
* @param nums: A list of integers* @return: A list of integers includes the index of the first number
* and the index of the last number
*/
public ArrayList<Integer> subarraySum(int[] nums) {
// write your code here
ArrayList<Integer> results = new ArrayList<>();
Map<Integer, Integer> map = new HashMap<>();
map.put(0, -1);
int sum = 0;
for (int i = 0; i < nums.length; i++) {
sum = nums[i] + sum;
//1 if (map.contains(sum)) {
if (map.containsKey(sum)) {
results.add(map.get(sum) + 1);
results.add(i);
return results;
}
map.put(sum, i);
}
return results;
// ArrayList<Integer> results = new ArrayList<>();
// if (nums == null || nums.length == 0) {
// return results;
// }
// 1
// if (nums.length == 1 && nums[0] == 0) {
// results.add(0);
// results.add(0);
// return results;
// }
// 1
// for (int i = 0; i < nums.length - 1; i++) {
// int sum = nums[i];
// 2
// if (sum == 0) {
// results.add(i);
// results.add(i);
// return results;
// }
// 2
// for (int j = i + 1; j < nums.length; j++) {
// sum = sum + nums[j];
// if (sum == 0) {
// results.add(i);
// results.add(j);
// return results;
// }
// }
// }
// return results;
}