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)官网 - 全球极客挚爱的技术成长平台

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

相关推荐
EQUINOX15 分钟前
倍增优化dp,P10976 统计重复个数
算法·数学建模·动态规划
样例过了就是过了9 分钟前
LeetCode热题100 电话号码的字母组合
数据结构·c++·算法·leetcode·dfs
nervermore99010 分钟前
1.10 面试经典150题-多数元素
算法
c++逐梦人10 分钟前
二分查找模版及二分答案例题
算法·蓝桥杯
biubiuibiu19 分钟前
选择适合的硬盘:固态与机械硬盘的对比与推荐
c++·算法
big_rabbit050223 分钟前
[算法][力扣226]翻转一颗二叉树
数据结构·算法·leetcode
TracyCoder12327 分钟前
LeetCode Hot100(65/100)——64. 最小路径和
算法·leetcode·职场和发展
z2014z27 分钟前
Deflate 算法详解
网络·算法
条tiao条28 分钟前
从 “Top-K 问题” 入门二叉堆:C 语言从零实现与经典应用
c语言·算法·深度优先
uesowys30 分钟前
华为OD算法开发指导-数据结构-图
数据结构·算法·华为od