码迷,mamicode.com
首页 > 编程语言 > 详细

各个元素之和等于给定值的连续子数组的个数

时间:2020-07-01 17:34:07      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:次数   sub   int   mis   开始   color   span   private   return   

给定一个数组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 }

 

各个元素之和等于给定值的连续子数组的个数

标签:次数   sub   int   mis   开始   color   span   private   return   

原文地址:https://www.cnblogs.com/adgjl/p/13220323.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!