반응형
https://leetcode.com/problems/count-number-of-bad-pairs/
class Solution {
public:
long long countBadPairs(vector<int>& nums) {
unordered_map<int, int> m;
long long res = 0;
for(int i=0; i<nums.size(); i++)
res += i - m[nums[i] - i]++;
return res;
}
};
j - i != nums[j] - nums[i] 조건을 이항해보면,
nums[i] - i != nums[j] - j로 바꿔볼 수 있습니다.
nums를 순회하면서, nums[i] - i의 카운트를 해시 테이블에 기억해줍니다.
bad pair의 (i, j) 쌍은 i < j를 만족해야 하는데,
순회하는 인덱스 i는 이미 항상 i < j를 만족하고 있는 j라고 볼 수 있습니다.
현재 순회하는 i - (nums[i] - i의 카운트)를 구해주면, j까지의 모든 bad pair는 상수 시간에 구해집니다.
따라서, O(N)의 시간으로 풀 수 있었습니다.
1 <= nums[i] <= 10^9이므로, 카운트는 unordered_map에 저장해줬습니다.
반응형
'Algorithm' 카테고리의 다른 글
LeetCode 1310. XOR Queries of a Subarray (0) | 2025.02.09 |
---|---|
LeetCode 1550. Three Consecutive Odds (0) | 2024.07.06 |
LeetCode 350. Intersection of Two Arrays II (0) | 2024.07.06 |
LeetCode 2181. Merge Nodes in Between Zeros (0) | 2024.07.06 |
LeetCode 2582. Pass the Pillow (0) | 2024.07.06 |