我试图理解一个程序,其任务是找出有多少个子数组的总和等于给定值。
我获取的复杂度为 O(N) 的工作代码:
static int findSubarraySum(int arr[], int K) {
Map<Integer, Integer> prevSum = new HashMap<>();
int res = 0;
int currsum = 0;
for (int i = 0; i < arr.length; i++) {
currsum += arr[i];
if (currsum == K)
res++;
if (prevSum.containsKey(currsum - K))
res += prevSum.get(currsum - K);
Integer count = prevSum.get(currsum);
if (count == null)
prevSum.put(currsum, 1);
else
prevSum.put(currsum, count + 1);
}
return res;
}
public static void main(String[] args) {
int arr[] = {10, 2, -2, -20, 10};
int sum = -10;
int n = arr.length;
System.out.println(findSubarraySum(arr, sum));
}
我无法理解以下代码背后的逻辑:
if (prevSum.containsKey(currsum - K))
res += prevSum.get(currsum - K);
上面代码中的 HashMap 如何有助于获得正确的结果。
慕桂英546537
相关分类