Given an integer array, find a subarray where the sum of numbers is zero. Your code should return the index of the first number and the index of the last number.
Example
Example 1:
Input: [-3, 1, 2, -3, 4]
Output: [0, 2] or [1, 3].
Explanation:
return anyone that the sum is 0.
Example 2:
Input: [-3, 1, -4, 2, -3, 4]
Output: [1,5]
Notice
There is at least one subarray that it's sum equals to zero.
Solution:A[i] + ... a[j] = presum[j] - presum[i - 1]. This question requires the sum equals to zero, which means presum[j] = presum[i - 1]. It's like the two sum problem, we can use a hash table to store the previous presum[i - 1] and its index.
Code (Java):
public class Solution {
/**
* @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 List<Integer> subarraySum(int[] nums) {
List<Integer> ans = new ArrayList<>();
if (nums == null || nums.length == 0) {
return ans;
}
Map<Integer, Integer> map = new HashMap<>();
map.put(0, 0);
int sum = 0;
for (int i = 1; i <= nums.length; i++) {
sum += nums[i - 1];
if (map.containsKey(sum)) {
ans.add(map.get(sum));
ans.add(i - 1);
break;
} else {
map.put(sum, i);
}
}
return ans;
}
}
No comments:
Post a Comment