-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path9_Count_Number_of_Bad_Pairs.cpp
55 lines (43 loc) · 1.63 KB
/
9_Count_Number_of_Bad_Pairs.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// 2364. Count Number of Bad Pairs
// 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.
// Example 1:
// Input: nums = [4,1,3,3]
// Output: 5
// Explanation: The pair (0, 1) is a bad pair since 1 - 0 != 1 - 4.
// The pair (0, 2) is a bad pair since 2 - 0 != 3 - 4, 2 != -1.
// The pair (0, 3) is a bad pair since 3 - 0 != 3 - 4, 3 != -1.
// The pair (1, 2) is a bad pair since 2 - 1 != 3 - 1, 1 != 2.
// The pair (2, 3) is a bad pair since 3 - 2 != 3 - 3, 1 != 0.
// There are a total of 5 bad pairs, so we return 5.
// Example 2:
// Input: nums = [1,2,3,4,5]
// Output: 0
// Explanation: There are no bad pairs.
// Constraints:
// 1 <= nums.length <= 105
// 1 <= nums[i] <= 109
class Solution
{
public:
long long countBadPairs(vector<int> &nums)
{
unordered_map<int, int> bag;
long long count = 0, n = nums.size();
for (int i = 0; i < n; i++)
{
int key = nums[i] - i;
count += bag[key];
bag[key]++;
}
return (n * (n - 1)) / 2 - count;
}
};
/*
This code finds the number of bad pairs in an array. A bad pair is when j-i != nums[j]-nums[i] where i<j.
The solution uses the fact that if j-i = nums[j]-nums[i], then nums[j]-j = nums[i]-i.
It stores nums[i]-i in a hashmap and counts frequencies.
For each element, it adds the count of previous elements with same difference to get good pairs.
Finally, it subtracts good pairs from total possible pairs (n*(n-1))/2 to get bad pairs.
Time complexity is O(n) and space complexity is O(n).
*/