zoukankan      html  css  js  c++  java
  • 65和为K的子数组(560)

    作者: Turbo时间限制: 1S章节: 哈希表

    晚于: 2020-08-19 12:00:00后提交分数乘系数50%

    截止日期: 2020-08-26 12:00:00

    问题描述 :

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

    示例 1 :

    输入:nums = [1,1,1], k = 2

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

    输入说明 :

    首先输入nums数组的长度n,

    然后输入n个整数,以空格分隔。

    最后输入整数k。

    n的范围为 [1, 20000]。

    数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。

    输出说明 :

    输出一个整数

    输入范例 :

    输出范例 :

    #include <iostream> 
    #include <vector>
    #include <unordered_map> 
    using namespace std;
    class Solution {
    public:
        int subarraySum(vector<int>& nums, int k) 
        {
            int res=0,sum=0;
            unordered_map<int,int> map;
            map[0]=1;
            for(auto t:nums)
            {
                sum+=t;
                res+=map[sum-k];
                ++map[sum];
            }
            return res;
        }
    };
    int main()
    {
        int n,k,data;
        vector<int> nums;
        cin>>n;
        for(int i=0; i<n; i++)
        {
            cin>>data;
            nums.push_back(data);
        }
        cin>>k;
        int res=Solution().subarraySum(nums,k);
        cout<<res;
        return 0;
    }
    /*
    遍历数组nums,计算从第0个元素到当前元素的和,
    用哈希表保存出现过的累积和sum的次数。如果sum - k在哈希表中出现过,
    则代表从当前下标i往前有连续的子数组的和为sum。时间复杂度为$O(n)$,空间复杂度为$O(n)$。
    */
  • 相关阅读:
    静下来好好学习
    深入学习Redis主从复制
    深入学习Redis持久化
    TPS、并发用户数、吞吐量关系
    P1067 多项式输出
    P1014 Cantor表
    P2089 烤鸡
    P1579 哥德巴赫猜想(升级版)
    P1217 [USACO1.5]回文质数 Prime Palindromes
    校内比赛 城市交通费
  • 原文地址:https://www.cnblogs.com/zmmm/p/13645342.html
Copyright © 2011-2022 走看看