Given an integer array, find a subarray where the sum of numbers is in a given interval. Your code should return the number of possible answers. (The element in the array should be positive)
Example
Given
[1,2,3,4] and interval = [1,3], return 4. The possible answers are:[0, 0]
[0, 1]
[1, 1]
[2, 2]
Code (Java):public class Solution {
/**
* @param A: An integer array
* @param start: An integer
* @param end: An integer
* @return: the number of possible answer
*/
public int subarraySumII(int[] A, int start, int end) {
if (A == null || A.length == 0) {
return 0;
}
int[] sum = new int[A.length + 1];
for (int i = 1; i <= A.length; i++) {
sum[i] += sum[i - 1] + A[i - 1];
}
int lo = 0;
int hi = 0;
int ans = 0;
for (int j = 1; j <= A.length; j++) {
while (lo < j && sum[lo] < sum[j] - end) {
lo++;
}
while (hi < j && sum[hi] <= sum[j] - start) {
hi++;
}
ans += hi - lo;
}
return ans;
}
}
No comments:
Post a Comment