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

leetcode hot100刷题日记——6.和为 K 的子数组

在这里插入图片描述
解答:前缀和思想,见灵茶山艾府大大题解。

(1)前缀和思想:

  • 前缀和数组prefix_sum的定义是prefix_sum[i] = nums[0] + nums[1] + … + nums[i]。
  • 如果存在两个前缀和prefix_sum[j]和prefix_sum[i]满足prefix_sum[i] - prefix_sum[j] = k,则子数组nums[j+1…i]的和为k。
  • 因此,问题转化为寻找满足prefix_sum[i] - k = prefix_sum[j]的索引对(i, j)。

(2)哈希表优化:

  • 使用哈希表cnt记录前缀和出现的次数。键为前缀和的值,值为该前缀和出现的次数。
  • 初始化时,cnt[0] = 1是为了处理从数组起点开始的子数组(即prefix_sum[i] = k的情况)。

(3)迭代过程:

  • 遍历数组,逐步计算前缀和s。
  • 对于每个s,检查s - k是否存在于哈希表中。如果存在,说明存在前缀和为s - k的位置,对应子数组的和为k,将对应次数累加到结果ans。
  • 将当前前缀和s加入哈希表,供后续迭代使用。
class Solution {
public:int subarraySum(vector<int>& nums, int k) {int n=nums.size();int ans=0;//s[0]=0 单独统计//如果有个前缀和正好等于k,也是需要统计次数的unordered_map<int ,int> cnt{{0,1}};int s=0;//存储前缀和的变量for(int i=0;i<n;i++){s+=nums[i];//不断计算前缀和ans+=cnt.contains(s-k)?cnt[s-k]:0;cnt[s]++;}return ans;}
};

(4)时间与空间复杂度

  • 时间复杂度:O(n)
    遍历数组一次,每次操作哈希表的时间为均摊O(1)。
  • 空间复杂度:O(n)
    哈希表最多存储n个前缀和。

相关文章:

  • 【Java微服务组件】异步通信P1—消息队列基本概念
  • 【Linux】第二十三章 控制启动过程
  • 高版本Fastjson:Getter调用限制及绕过方式探究
  • python学习day3
  • Linux 磁盘扩容实战案例:从问题发现到完美解决
  • idea部署本地仓库和连接放送远程仓库
  • 2025年PMP 学习二十三 16章 高级项目管理
  • IGBT选型时需关注的参数,适用场景(高压大电流低频)以及驱动电路设计注意事项
  • 【信息系统项目管理师】第11章:项目成本管理 - 32个经典题目及详解
  • 六足连杆爬行机器人的simulink建模与仿真
  • ISCC 2025决赛 wp
  • HBCPC2025 补题 (F、I)
  • 家用和类似用途电器的安全 第1部分:通用要求 与2005版差异(6)
  • 【C++算法】69.栈_验证栈序列
  • BI是什么意思?一文讲清BI的概念与应用!
  • 【C/C++】现代C++线程池:从入门到生产级实现
  • RocketMQ 顺序消息实现原理详解
  • 2.前端汇总
  • 三色光源投影暗战:FSHD 如何撕开 DLP/3LCD 垄断缺口?
  • 计算机科技笔记: 容错计算机设计05 n模冗余系统 双模冗余系统 Duplex Systems
  • 每天少看1小时手机,就可能有神奇效果
  • 葡萄牙三年第三次大选:“三分天下”已定,“欧洲例外”不再
  • 中英举行人工智能对话
  • 最高法:政府信息公开案件审理应避免泄露国家秘密、商业秘密
  • 北京人艺新戏《一日顶流》将出现人工智能角色
  • 习近平向2025年上海合作组织减贫和可持续发展论坛致贺信