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

【每日一题】 和为 K 的子数组

文章目录

  • 题目描述
  • 题解

在这里插入图片描述

题目描述


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 * 104
-1000 <= nums[i] <= 1000
-107 <= k <= 107

题解


前缀和 + 哈希表优化

如 nums 为 1 2 3 4 5 6
前缀和: 1 3 6 10 15 21

只需要一个数 pre 维护当前的前缀和。
如遍历到6的时候我们pre 为21,但是此时已经用哈希表存储了前缀的值和次数,假设我们k = 11,就可以通过哈希表查找 pre - k ,即 10是否存在哈希表,且存在几次。同理,我们就遍历一遍nums数组,实际上就对每一个元素都进行了前缀集合当中的查找,时间复杂度为O(N)。

class Solution {
public:
//pre 维护的是nums[0~i]的值,um维护的是数值到下标的映射,就是子数组的和
//pre - k 获得需要的值,从um当中找有多少个前缀满足.
    int subarraySum(vector<int>& nums, int k) {
        int pre = 0;
        unordered_map<int,int> um;//值和次数的映射
        int count = 0;
        um[0] = 1;
        for(int i = 0;i < nums.size() ;++i)
        {   
            pre += nums[i];//维护到i的数组和
            auto it = um.find(pre - k); //计算当前是否有满足的前缀
            //cout << pre - k << " ";
            if(it != um.end()) count += it->second; // 若有,则count 加上满足的前缀数量
            //cout << pre << endl;
            um[pre]++;//维护前缀和
        }

        return count;
    }
};



end

  • 喜欢就收藏
  • 认同就点赞
  • 支持就关注
  • 疑问就评论

相关文章:

  • 【初认Redis】
  • HTTP之Hop-by-hop首部
  • 指标体系搭建-专项1
  • 尚好房 10_Spring Security
  • JDK RMI探索与使用--序列化
  • Self-supervised Low Light Image Enhancement and Denoising 论文阅读笔记
  • hive窗口函数(开窗函数)
  • SpringMVC:整合SSM
  • 【每日一题】路径总和 III
  • 【Vue】基础系列(三三)指令语法-事件及其修饰符,动态样式,v-model的用法,数据持久化存在本地localStorage
  • 01_JSON的理解
  • 3D感知技术(3)双目立体视觉测距
  • spring学习第二天_Spring Ioc(1)
  • 22-08-30 西安JUC(03) Callable接口、阻塞队列4套方法、ThreadPool线程池
  • React(8)-组件ref
  • 《剑指offer》分解让复杂问题更简单
  • angular学习第一篇-----环境搭建
  • Apache Spark Streaming 使用实例
  • Apache的80端口被占用以及访问时报错403
  • C# 免费离线人脸识别 2.0 Demo
  • CSS中外联样式表代表的含义
  • C学习-枚举(九)
  • gulp 教程
  • HTTP中GET与POST的区别 99%的错误认识
  • Java 多线程编程之:notify 和 wait 用法
  • Java多态
  • Linux Process Manage
  • Meteor的表单提交:Form
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • React Native移动开发实战-3-实现页面间的数据传递
  • Yeoman_Bower_Grunt
  • zookeeper系列(七)实战分布式命名服务
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 程序员该如何有效的找工作?
  • 大型网站性能监测、分析与优化常见问题QA
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 对JS继承的一点思考
  • 给新手的新浪微博 SDK 集成教程【一】
  • 规范化安全开发 KOA 手脚架
  • ------- 计算机网络基础
  • 前端技术周刊 2019-02-11 Serverless
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 详解NodeJs流之一
  • 阿里云服务器购买完整流程
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (9)STL算法之逆转旋转
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (python)数据结构---字典
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (论文阅读30/100)Convolutional Pose Machines
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (五)c52学习之旅-静态数码管
  • (转)Linux NTP配置详解 (Network Time Protocol)