code 560

不说废话,直接刷题。用前缀和加上哈希表,时间复杂度可以控制在 O(N)O(N)O(N).哈希表是用 O(1)O(1)O(1) 的时间做到查询。哈希表和字典差不多,或者和直接搜索差不多,但是效率非常快,就是常数时间就可以查找成功。keykeykey 是前缀和,valuevaluevalue 是该前缀和出现的次数。
preSum[j−1]=preSum[i]−kpreSum[j-1]=preSum[i]-kpreSum[j−1]=preSum[i]−k

我们就是查询 preSum[j−1]preSum[j-1]preSum[j−1] 是否存在,如果存在,我们就把这个答案累加到计数器里面。

cpp 复制代码
class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        unordered_map<int, int> mp;
        mp[0] = 1;
        int preSum = 0;
        int count = 0;
        for ( auto& num: nums ) {
            preSum += num;
            if ( mp.find( preSum - k ) != mp.end() ) {
                count += mp[ preSum - k ];
            }
            mp[preSum]++;
        }
        return count;
    }
};
相关推荐
BirdenT2 分钟前
20260519紫题训练
c++·算法
csdn_aspnet5 小时前
C语言 Lomuto分区算法(Lomuto Partition Algorithm)
c语言·开发语言·算法
谙弆悕博士6 小时前
【附C源码】从零实现C语言堆数据结构:原理、实现与应用
c语言·数据结构·算法··数据结构与算法
zhangjw348 小时前
第11篇:Java Map集合详解,HashMap底层原理、哈希冲突、JDK1.8优化、遍历方式彻底吃透
java·开发语言·哈希算法
gaosushexiangji9 小时前
DIC系统推荐:基于千眼狼三维数字图像相关的无人机旋翼疲劳试验全场应变与位移测量
人工智能·算法
小王C语言10 小时前
【线程概念与控制】:线程封装
jvm·c++·算法
kyle~11 小时前
工程数学---点云配准卡布施(Kabsch)算法(求解最优旋转矩阵)
线性代数·算法·矩阵
张二娃同学11 小时前
03_变量常量与输入输出_printf与scanf详解
算法
江南十四行12 小时前
并发编程(一)
java·jvm·算法
z2005093012 小时前
今日算法(依旧二叉树)
算法·leetcode·职场和发展