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

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

相关推荐
山北雨夜漫步4 分钟前
机器学习 Day17 朴素贝叶斯算法-----概率论知识
人工智能·算法·机器学习
是店小二呀26 分钟前
【优选算法 | 字符串】字符串模拟题精选:思维+实现解析
android·c++·算法
成工小白40 分钟前
【Linux】进程地址空间
linux·算法
凤年徐40 分钟前
【C/C++】自定义类型:结构体
c语言·开发语言·c++·经验分享·笔记·算法
闪电麦坤951 小时前
数据结构:树(Tree)
数据结构
Inverse1622 小时前
C语言_自定义类型:结构体
c语言·开发语言·算法
Musennn2 小时前
102. 二叉树的层序遍历详解:队列操作与层级分组的核心逻辑
java·数据结构·算法·leetcode
越来越无动于衷2 小时前
java数组题(5)
java·算法
理论最高的吻2 小时前
77. 组合【 力扣(LeetCode) 】
c++·算法·leetcode·深度优先·剪枝·回溯法
学习中的码虫2 小时前
c 中的哈希表
数据结构·哈希算法·散列表