leetcode-560. 和為K的子陣列
阿新 • • 發佈:2021-07-25
字首和與雜湊表
// 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; } };