当前位置: 首页 > news >正文

560. 和为K的子数组

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。
子数组是数组中元素的连续非空序列。

示例 1:

输入:nums = [1,1,1], k = 2
输出:2

解题思路:
这道题求的是子数组和为k,看到子数组和就要想到前缀和之差,即pre_sum[i] - pre_sum[j] = k.
所以就需要先计算出前缀和数组pre_sum,然后遍历i,然后再遍历j,找到所有即i结尾的并且和为k的子数组。

class Solution {public int subarraySum(int[] nums, int k) {int n = nums.length;int ans = 0;int[] pre_sum = new int[n]; // 记录前缀和pre_sum[0] = nums[0];for(int i = 1; i < n; i++){pre_sum[i] = pre_sum[i-1] + nums[i];}for(int i = 0; i < n; i++){// 如果pre_sum[i]等于k也要加一if(pre_sum[i] == k){ans++;}for(int j = 0; j < i; j++){if(pre_sum[i] - pre_sum[j] == k){ans++;}}}return ans;}
}

优化:
通过分析代码可以知道,对于每个i,j都要从头开始遍历一遍,浪费了大量时间。如果我们能在O(1)的时间内就知道 i 前面有哪些前缀和,就能节省时间。那么就自然想到用HashMap记录下 i 前面有哪些前缀和以及出现的次数。
并且在map里面添加一个key为0的元素,这样就不用单独判断当pre_sum=k的情况了。

class Solution {public int subarraySum(int[] nums, int k) {int n = nums.length;int ans = 0;int[] pre_sum = new int[n]; // 记录前缀和pre_sum[0] = nums[0];Map<Integer, Integer> cnt = new HashMap<>();for(int i = 1; i < n; i++){pre_sum[i] = pre_sum[i-1] + nums[i];}cnt.put(0, 1);for(int i = 0; i < n; i++){ans += cnt.getOrDefault(pre_sum[i] - k, 0);cnt.put(pre_sum[i], cnt.getOrDefault(pre_sum[i], 0) + 1);}return ans;}
}

优化:
我们可以发现,两次for循环其实可以合并为一个for循环,并且我们已经用HashMap记录了 i 之前的前缀和了,那么就可以不用单独用数组来存储前缀和了。

class Solution {public int subarraySum(int[] nums, int k) {int ans = 0;int sum = 0;Map<Integer, Integer> cnt = new HashMap<>();cnt.put(0, 1);for(int num : nums){sum += num;ans += cnt.getOrDefault(sum - k, 0);cnt.put(sum, cnt.getOrDefault(sum, 0) + 1);}return ans;}
}
http://www.dtcms.com/a/244840.html

相关文章:

  • 软件测试之APP测试要点(包含Monkey基础使用)
  • C++实现文本编辑功能
  • C primer plus (第六版)第七章 编程练习第4题,第5题
  • 企业如何高效构建BI团队,解锁数据价值新高地?
  • 解锁Wi-SUN潜能!移远通信发布KCM0A5S模组,点亮智慧城市新图景
  • 利用递归来遍历树
  • 蛋糕烘焙小程序源码介绍
  • 阿糖胞苷联合伊达比星为代表的强化治疗方案引领AML多阶段治疗新进展
  • UFS-Ver3.1-第九章
  • docker 安装postgre并使用php进行连接
  • Nextcloud的性能提升3倍的部署说明:你的nextcloud需要重新部署了
  • day64—回溯—组合数(LeetCode-77)
  • Verilog:流水线乘法器
  • Unity Android 启动应用的时候黑屏问题
  • 关于亚马逊WOOT折扣力度
  • 【沉浸式解决问题】csdn无法发布文章
  • 最长和谐子序列
  • 常见无法用初等函数表示的不定积分(表格总结)
  • 数据隐私是什么?如何做好数据隐私规范?
  • MacBook M1 Pro下载安装MySql
  • 【2025最新版】Node.js详细安装配置教程(Windows系统)附安装包
  • (九)现代循环神经网络(RNN):从注意力增强到神经架构搜索的深度学习演进
  • Spring Data MongoDB 提供了哪些核心组件?
  • GJB151B在151A的比较
  • 微信小程序中wxs
  • 新闻类鸿蒙应用功耗危机以及优化方案
  • Antv g6 tooltip 实现hover时可点击tooltip里的内容
  • 达梦数据库DCA考试命令行操作
  • defaultdict 在python中的作用
  • 【Cross-Language Binary-Source Code Matching with Intermediate Representations】