给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数。

滑动窗口没办法解决有负数的情况

方法一:

预处理 前缀和 sum_ij = preSum[j] - preSum[i-1];

class Solution {
public int subarraySum(int[] nums, int k) {
//滑动窗口没办法解决有负数的情况
//预处理 前缀和 sum_ij = preSum[j] - preSum[i-1];\
int n = nums.length;
int[] preSums = new int[n+1];
for(int i=0;i<n;++i)
{
preSums[i+1] = preSums[i] + nums[i];
} int ans = 0; for(int i=1;i<=n;++i)
{
for(int j=0;j<i;++j)
{
if(preSums[i]-preSums[j]==k) ++ans;
} }
return ans;
}

方法二

使用HashMap,sumToCount的哈希表,其中key值是sum,value是count,sum-k如果有则加上该count

class Solution {
public int subarraySum(int[] nums, int k) {
//滑动窗口没办法解决有负数的情况
//预处理 前缀和 sum_ij = preSum[j] - preSum[i-1];\
// int n = nums.length;
// int[] preSums = new int[n+1];
// for(int i=0;i<n;++i)
// {
// preSums[i+1] = preSums[i] + nums[i];
// } // int ans = 0; // for(int i=1;i<=n;++i)
// {
// for(int j=0;j<i;++j)
// {
// if(preSums[i]-preSums[j]==k) ++ans;
// } // }
// return ans; //使用map<sum,count>
Map<Integer,Integer> sumCount = new HashMap<>();
sumCount.put(0,1);
int sum = 0;
int count = 0;
for(int num : nums)
{
sum += num;
count += sumCount.getOrDefault(sum-k,0);//取不到就是0
sumCount.put(sum, sumCount.getOrDefault(sum,0)+1);//sum的 次数加1
}
return count;
}
}

最新文章

  1. elasticsearch完全匹配
  2. JavaScript 中this与Dom中的注意
  3. WordPress的have_posts()和the_post()用法解析
  4. c# 图片XML序列化与反序列化
  5. VC Dimension -衡量模型与样本的复杂度
  6. ecshop中404错误页面设置
  7. 73_leetcode_Construct Binary Tree from Inorder and Postorder Traversal
  8. Swing-布局管理器之GridLayout(网格布局)-入门
  9. Debian GNU/Linux 8.4 (jessie)编译安装php.md
  10. NFS+sersync+Keepalived高可用方案
  11. DBUtils学习总结
  12. C# 换行
  13. 02-CSS&amp;JS
  14. win10更新后,可以远程桌面ping也没问题,但是无法访问共享文件夹的解决方法
  15. js 上传文件
  16. React-Native视频组件react-native-video使用(安卓版)
  17. 使用通用mapper 生成代码
  18. [译文]c#扩展方法(Extension Method In C#)
  19. mini2440裸机试炼之——看门狗中断和复位操作
  20. 5 属性 property

热门文章

  1. jmeter监控linux服务器资源
  2. php 解决返回数据 数字 变成科学计数法后转换问题
  3. three.js 元素跟随物体效果
  4. 『GoLang』结构体与方法
  5. Winform 实现图片轮播(解决Image.FromFile内存不足)
  6. 好未来数据中台 Node.js BFF实践(一):基础篇
  7. salesforce零基础学习(一百零八)MFA
  8. VUE自学日志02-应用与组件实例
  9. BIBD&amp;SBIBD的矩阵题
  10. 常用的SQL查询思维/场景