leetcode560和为k的子数组

cpp 复制代码
class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        unordered_map<int,int>mp;
        mp[0]=1;
        int count=0,pre=0;
        for(auto& x:nums){
            pre+=x;
            if(mp.find(pre-k)!=mp.end()){
                count+=mp[pre-k];
            }
            mp[pre]++;
        }
        return count;
    }
};

一个超级好的思路,pre表示前缀和,每次把前缀和放进去,如果当前前缀和pre-k可以在前面的前缀和中找到,就说明它们之间的一段和为k,非常牛逼的思路。

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

一开始想暴力枚举区间结果超时了。

相关推荐
2401_832131951 分钟前
模板编译期机器学习
开发语言·c++·算法
嵌入小生0071 分钟前
Data Structure Learning: Starting with C Language Singly Linked List
c语言·开发语言·数据结构·算法·嵌入式软件
ValhallaCoder4 分钟前
hot100-子串
数据结构·python·算法
ygklwyf7 分钟前
无向图的连通性之割点/边,点/边双连通分量
算法·无向图·圆方树
2401_838472518 分钟前
单元测试在C++项目中的实践
开发语言·c++·算法
naruto_lnq13 分钟前
移动语义与完美转发详解
开发语言·c++·算法
MicroTech202523 分钟前
自适生长的点云智能:MLGO微算法科技基于双阈值与DDM的仿生式配准算法
科技·算法
还是奇怪26 分钟前
Python第四课:循环与数据结构深度解析
数据结构·windows·python·青少年编程·循环
yunsr32 分钟前
python作业1
开发语言·python·算法
清铎40 分钟前
项目_华为杯’数模研赛复盘_第二问
深度学习·算法·机器学习