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

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

相关推荐
懿所思17 分钟前
8.Java内置排序算法
java·算法·排序算法
sleP4o17 分钟前
求各种排序算法的执行时间
算法·排序算法
码农老起18 分钟前
选择排序:简单算法的实现与优化探索
数据结构·算法·排序算法
机器学习之心29 分钟前
工程设计优化问题:改进海鸥算法(Matlab)
算法·matlab
Cosmoshhhyyy37 分钟前
LeetCode:3159. 查询数组中元素的出现位置(hash Java)
java·leetcode·哈希算法
sjsjs1140 分钟前
【多维DP】力扣576. 出界的路径数
算法·leetcode·职场和发展
ZZTC44 分钟前
BFS中的双向广搜和A-star
算法·宽度优先
该醒醒了~1 小时前
Yolo算法中特征相似导致误报问题
人工智能·算法·yolo
被AI抢饭碗的人1 小时前
算法题(18):删除有序数组中的重复项2
数据结构
董董灿是个攻城狮1 小时前
传统计算机视觉之均值滤波初探
算法