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

【前缀和计算和+哈希表查找次数】Leetcode 560. 和为 K 的子数组

题目要求

给定一个整数数组 nums 和一个整数 k,统计并返回该数组中和为 k 的子数组的个数。

子数组是数组中元素的连续非空序列。

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

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

提示

  • 1 <= nums.length <= 2 * 10^4
  • -1000 <= nums[i] <= 1000
  • -10^7 <= k <= 10^7

实际应用

金融数据分析

在股票或金融交易数据中,快速找到特定时间段内收益为特定值的交易窗口。

例如,识别连续几天内收益总和为某个目标值的交易窗口,帮助分析市场趋势。

实时数据监控

在实时数据流中,快速检测和响应特定的事件模式,如网络流量监控、服务器性能监控等。

例如,实时计算某段时间内的流量或负载是否达到预警阈值。

前缀和+哈希表优化

  • 思想:通过计算前缀和并利用哈希表记录每个前缀和出现的次数,可以快速计算任意子数组的和。当前缀和为 sum 时,若 sum - k 存在于哈希表中,则表示存在以当前索引结尾的子数组和为 k
  • 时间复杂度:遍历数组的时间复杂度为 O(n),中间利用哈希表查询删除的复杂度均为 O(1),因此总时间复杂度为 O(n)
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;int subarraySum(vector<int> &nums, int k)
{unordered_map<int, int> mp;int sum = 0, res = 0;// mp[0]表示前缀和为0的子数组个数mp[0] = 1;for (int i = 0; i < nums.size(); i++){// 计算当前前缀和sum += nums[i];// 如果存在前缀和为sum-k的子数组,那么当前子数组就是满足条件的子数组if (mp.find(sum - k) != mp.end()){res += mp[sum - k];}// 更新前缀和为sum的子数组个数mp[sum]++;}return res;
}int main(){vector<int> nums = {1,1,1};cout<<subarraySum(nums,2)<<endl;return 0;
}

推荐一下

https://github.com/0voice

相关文章:

  • 零基础教学:用GISBox将RVT转为3DTiles
  • 日本企业突破机器人感知技术:人形机器人获嗅觉能力
  • 那些年踩过的坑之Arrays.asList
  • 7.Excel:单元格格式
  • Easysearch 基础运维扫盲指南:从 HTTP 到 HTTPS、认证与安全访问全解析
  • OpenCV 图形API(64)图像结构分析和形状描述符------在图像中查找轮廓函数findContours()
  • AI编程:[体验]从 0 到 1 开发一个项目的初体验
  • 如何在IDEA中高效使用Test注解进行单元测试?
  • 产品动态|千眼狼sCMOS科学相机捕获单分子荧光信号
  • 前端面试(Vue React)内容目录与备考建议
  • websheet 之 sheet操作
  • Spark-Streaming(三)
  • 逐行解析性能奥秘:借助 `line_profiler` 深入优化热点函数
  • Node.js 开发项目
  • Antd Modal Drawer 更改默认项
  • 【leetcode刷题日记】lc.73-矩阵置零
  • 一些有关ffmpeg 使用(1)
  • Z-Wave正通过自我革新,重塑在智能家居领域新定位
  • [FPGA基础] DMA
  • 0基础 | Proteus仿真 | 51单片机 | 继电器
  • 冯象|那“交出”后的崩溃,如撒旦坠落诸天
  • 瑞士外长答澎湃:瑞中都愿升级自贸协定,关税战没有任何好处
  • 上海消保委调查二次元消费:手办与卡牌受欢迎,悦己和社交是动力
  • 话剧《门第》将开启全国巡演:聚焦牺牲、爱与付出
  • 中国在建结构第一高楼“天津117大厦”将复工,预计2027年完工
  • “棉花糖爸爸”陈生梨:女儿将落户到贵州纳雍