- categories: Code, Interview Question, leetcode, Medium
- source: https://leetcode.com/problems/count-number-of-bad-pairs
- topics: Mathematics, Hash Table
Description
You are given a 0-indexed integer array nums
. A pair of indices (i, j)
is a bad pair if i < j
and j - i != nums[j] - nums[i]
.
Return the total number of bad pairs in nums
.
Idea
- Observe that
j - i != nums[j] - nums[i] => j - nums[j] = i - nums[i]
- Count good pairs
- Answer = Total nbr of pairs - good pairs
Code
class Solution:
def countBadPairs(self, nums: List[int]) -> int:
good_pairs = [v for k,v in
Counter(t - i for i, t in enumerate(nums)).items() if v > 1]
ans = len(nums) * (len(nums) - 1) // 2 - sum(t * (t-1) // 2 for t in good_pairs)
return ans