Leetcode Hot 100 560. 和为 K 的子数组 中等 · 哈希表 题目 560. 和为 K 的子数组 官方题解 枚举遍历 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class Solution { public: int subarraySum(vector<int>& nums, int k) { int res = 0; for (int i = 0; i < nums.size(); i ++) { int sum = 0; for (int j = i; j < nums.size(); j ++ ) { sum += nums[j]; if (sum == k) { res ++; } } } return res; } }; 时间复杂度:O(n^2) 空间复杂度:O(1) 测试用例:92 / 93 前缀和 + 哈希表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Solution { public: int subarraySum(vector<int>& nums, int k) { unordered_map<int, int> mp; mp[0] = 1; int count = 0, pre = 0; for (auto& x:nums) { pre += x; if (mp.find(pre - k) != mp.end()) { count += mp[pre - k]; } mp[pre]++; } return count; } }; 时间复杂度:O(n) 空间复杂度:O(n)