• 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)$。
    */
  • 相关阅读:
    POJ 1328 Radar Installation
    POJ 1700 Crossing River
    POJ 1700 Crossing River
    poj 3253 Fence Repair (贪心,优先队列)
    poj 3253 Fence Repair (贪心,优先队列)
    poj 3069 Saruman's Army(贪心)
    poj 3069 Saruman's Army(贪心)
    Redis 笔记与总结2 String 类型和 Hash 类型
    数据分析方法有哪些_数据分析方法
    数据分析方法有哪些_数据分析方法
  • 原文地址:https://www.cnblogs.com/zmmm/p/13645342.html
Copyright © 2020-2023  润新知