leetcode-560. 和为K的子数组
作者:互联网
前缀和与哈希表
// class Solution { // public: // int subarraySum(vector<int>& nums, int k) { // // 前缀和 // // 超时 // vector<int> pre(nums.size()+1,0); // pre[0] = 0; // for(int i = 0; i < nums.size(); i++){ // pre[i+1] = pre[i] + nums[i]; // } // int count = 0; // for(int i = 0; i < nums.size(); i++) // for(int j = i; j < nums.size(); j++){ // if(pre[j+1]-pre[i] == k) // count++; // } // return count; // } // }; class Solution { public: int subarraySum(vector<int>& nums, int k) { // 前缀和 // 超时 unordered_map<int,int> in_map; int pre = 0; int count = 0; in_map[0] = 1; // 避免了in_map.find(0)找不到的现象 for(int i = 0; i < nums.size(); i++){ pre = pre + nums[i]; // 前缀和 if(in_map.find(pre-k)!=in_map.end()){ //count = count + 1; count = count + in_map[pre-k]; // 为什么不用上面一个,因为前缀和可能有多个序列等于同一个值。 } in_map[pre]++; } return count; } };
标签:pre,count,nums,560,++,int,map,数组,leetcode 来源: https://www.cnblogs.com/ymec/p/15057744.html