-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path2006.CountKDifference.cs
56 lines (48 loc) · 1.46 KB
/
2006.CountKDifference.cs
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
56
// 2006. Count Number of Pairs With Absolute Difference K
// Given an integer array nums and an integer k, return the number of pairs (i, j) where i < j such that |nums[i] - nums[j]| == k.
// The value of |x| is defined as:
// x if x >= 0.
// -x if x < 0.
// Example 1:
// Input: nums = [1,2,2,1], k = 1
// Output: 4
// Explanation: The pairs with an absolute difference of 1 are:
// - [1,2,2,1]
// - [1,2,2,1]
// - [1,2,2,1]
// - [1,2,2,1]
// Example 2:
// Input: nums = [1,3], k = 3
// Output: 0
// Explanation: There are no pairs with an absolute difference of 3.
// Example 3:
// Input: nums = [3,2,1,5,4], k = 2
// Output: 3
// Explanation: The pairs with an absolute difference of 2 are:
// - [3,2,1,5,4]
// - [3,2,1,5,4]
// - [3,2,1,5,4]
public class Solution {
public int CountKDifference(int[] nums, int k) {
int max = nums[0];
for (int i = 1; i < nums.Length; i++)
{
max = Math.Max(max, nums[i]);
}
int[] freq = new int[max + 1];
foreach (int num in nums)
freq[num]++;
int count = 0;
for (int i = 0; i < freq.Length - k; i++)
{
if (k == 0 && freq[i] > 1)
{
count += freq[i] - 1;
}
else if (k !=0 && freq[i] > 0 && freq[i + k] > 0){
count += freq[i] * freq[i + k];
}
}
return count;
}
}