zoukankan      html  css  js  c++  java
  • LeetCode 560. 和为K的子数组(Subarray Sum Equals K)

    题目描述

    给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。

    示例 1 :

    输入:nums = [1,1,1], k = 2
    输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。
    

    说明 :

    1. 数组的长度为 [1, 20,000]。
    2. 数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。

    解题思路

    维护一个map,在遍历数组时,更新包含当前数字之前所有数的和出现的次数,这样每遍历到一个位置,将当前和减去k,若map中出现了此和,则说明一定会有一个连续的子数组和为k,所以使结果加上此和出现的次数。

    代码

     1 class Solution {
     2 public:
     3     int subarraySum(vector<int>& nums, int k) {
     4         int res = 0, sum = 0;
     5         map<int, int> kmap;
     6         kmap[0] = 1;
     7         for(int num: nums){
     8             sum += num;
     9             res += kmap[sum - k];
    10             kmap[sum]++;
    11         }
    12         return res;
    13     }
    14 };
  • 相关阅读:
    Adobe Flash Player 设置鼠标点不到允许或者拒绝!
    bzoj2096
    bzoj2789
    LA3353
    poj2594
    bzoj2427
    bzoj1076
    bzoj2818
    bzoj3668
    bzoj2006
  • 原文地址:https://www.cnblogs.com/wmx24/p/10623800.html
Copyright © 2011-2022 走看看