반응형
LV. Medium 🧐
https://leetcode.com/problems/subarray-sum-equals-k/
문제
Given an array of integers nums and an integer k, return the total number of continuous subarrays whose sum equals to k.
Example 1:
Input: nums = [1,1,1], k = 2
Output: 2
Example 2:
Input: nums = [1,2,3], k = 3
Output: 2
Constraints:
- 1 <= nums.length <= 2 * 10^4
- -1000 <= nums[i] <= 1000
- -10^7 <= k <= 10^7
문제 해결법
배열을 처음부터 끝까지 돌면서 sum 값을 저장해준다.
또한 sum이 나오는 개수도 맵에 저장해준다.
n번째 인덱스에서의 sum - k의 값이 7일 때 맵의 7 키에 2가 저장되어 있으면, n번째 인덱스에서 배열 앞쪽으로 찾을 수 있는 조합의 개수가 2개인 것이다.
sum - k의 값이 맵에 있으면 count에 저장!
마지막에 count를 리턴하면 끝!
해결 코드
class Solution {
private:
unordered_map<int, int> m;
int count;
int sum;
public:
int subarraySum(vector<int>& nums, int k) {
count = 0;
sum = 0;
m[0] = 1;
for (int i = 0; i < nums.size(); ++i) {
sum += nums[i];
if (m.find(sum - k) != m.end())
count += m[sum - k];
if (m.find(sum) == m.end())
m[sum] = 1;
else
m[sum]++;
}
return count;
}
};
728x90
'Computer Science > 알고리즘' 카테고리의 다른 글
leetcode 78) Subsets (0) | 2022.02.13 |
---|---|
leetcode 127) Word Ladder (0) | 2022.02.12 |
leetcode 567) Permutation in String (0) | 2022.02.11 |
leetcode 532) K-diff Pairs in an Array (0) | 2022.02.09 |
leetcode 258) Add Digits (0) | 2022.02.08 |
댓글