和为 K 的子数组——前缀和+哈希

和为 K 的子数组——前缀和+哈希_第1张图片

题目链接:力扣

注意:此题不能使用滑动窗口,因为数组中可能会出现负数。也就是说右指针向后移1位不能保证区间会增大,左指针向后移1位也不能保证区间和会减小。给定左右指针的位置没有二段性

已知sum[i]是从nums[0~i]的和,sum[i-1]是nums[0~i-1]的和

则有 sum[i] - sum[i-1] = nums[i]

则存在一个j(0<=j<=i) 使得sum[i]-sum[j] = k;

即sum[j] = sum[i]-k;    这个sum[j]的个数就是数组中和为k的连续子数的个数

在本题解中,在循环中完成sum[i]的计算即sum

这里用map来记录sum-k的个数

class Solution {
public:
    int subarraySum(vector& nums, int k) {
       
        map mymap;  //key:值 value:出现的次数

        mymap[0]=1;

        int sum =0, ret =0;

        for(int i=0;i

你可能感兴趣的:(leetcode做题心得,哈希算法,算法)