标签:map 21 nums int 2022 数组 new 前缀
剑指 Offer II 010. 和为 k 的子数组
难度中等给定一个整数数组和一个整数 k
,请找到该数组中和为 k
的连续子数组的个数。
1 class Solution { 2 public int subarraySum(int[] nums, int k) { 3 Map<Integer,Integer> map=new HashMap<>(); 4 int n=nums.length,sum=0,ans=0; 5 int[] pre=new int[n]; 6 for (int i=0;i<n;i++){ 7 sum+=nums[i]; 8 pre[i]=sum; 9 } 10 for (int i=0;i<n;i++){ 11 ans+=map.getOrDefault(pre[i]-k,0); 12 map.put(pre[i],map.getOrDefault(pre[i],0)+1); 13 if (pre[i]==k) ans++; 14 } 15 return ans; 16 } 17 }
思路:先求前缀和,任意两个前缀和的差就是连续的子数组,所以用map记录前缀和的频率,再计算答案。需要注意,如果前缀和本身等于k
,答案要加1。
标签:map,21,nums,int,2022,数组,new,前缀 来源: https://www.cnblogs.com/benbicao/p/16503237.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。