1. 程式人生 > 其它 >leetcode-560. 和為K的子陣列

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; } };