[leetcode]560. Subarray Sum Equals K

来源:互联网 发布:淘宝基础版装修规格 编辑:程序博客网 时间:2024/06/05 19:04

题目链接:https://leetcode.com/problems/subarray-sum-equals-k/#/description

Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k.

Example 1:

Input:nums = [1,1,1], k = 2Output: 2

思路:

用sum表示从数组开始位置到当前位置的数字相加和,我们还可以用Hash Table来存储sum出现的次数,如果当前位置之前有相加和为sum-k的位置,则这两个位置之间的数字相加和为k,以当前位置结尾的相加和为k的子数组个数为hash[sum-k],这样遍历整个数组即可得出满足条件的子数组个数。

class Solution{public:    int subarraySum(vector<int>& nums,int k)    {        int sum=0,cnt=0;        unordered_map<int,int> hash;        hash[0]=1;        for(int i=0;i<nums.size();i++)        {            sum+=nums[i];            cnt+=hash[sum-k];            hash[sum]++;        }        return cnt;    }};


原创粉丝点击