各个元素之和等于给定值的连续子数组的个数
Posted poser
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了各个元素之和等于给定值的连续子数组的个数相关的知识,希望对你有一定的参考价值。
给定一个数组arr,给定一个数target。求,各个元素之和等于target的连续子数组的个数,时间复杂度为O(N),空间复杂度也为O(N)
借助一个Map即可实现。Map中保存的是:从arr的最左侧元素(也就是下标为0的元素)开始,到当前位置为止,所有元素的和出现的次数。
1 private int getNumOfSubThatSumIsTarget(int[] arr, int target) { 2 Map<Integer, Integer> map = new HashMap<>(); 3 map.put(0, 1); 4 5 int result = 0; 6 int curSum = 0; 7 for (int i = 0; i < arr.length; ++i) { 8 curSum += arr[i]; 9 10 result += map.getOrDefault(curSum - target, 0); 11 12 map.put(curSum, map.getOrDefault(curSum, 0) + 1); 13 } 14 15 return result; 16 }
以上是关于各个元素之和等于给定值的连续子数组的个数的主要内容,如果未能解决你的问题,请参考以下文章
算法总结之 未排序数组中累加和小于或等于给定值的最长子数组长度