To maximize the number of distinct elements, for each number, try to move it as far as possible within the range [num-k, num+k] to avoid collisions with other numbers. We can greedily assign each number to the smallest available value in its range.
classSolution {
public:int maxDistinctElements(vector<int>& nums, int k) {
sort(nums.begin(), nums.end());
unordered_set<int> used;
for (int num : nums) {
for (int x = num - k; x <= num + k; ++x) {
if (!used.count(x)) {
used.insert(x);
break;
}
}
}
return used.size();
}
};
import java.util.*;
classSolution {
publicintmaxDistinctElements(int[] nums, int k) {
Arrays.sort(nums);
Set<Integer> used =new HashSet<>();
for (int num : nums) {
for (int x = num - k; x <= num + k; x++) {
if (!used.contains(x)) {
used.add(x);
break;
}
}
}
return used.size();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
classSolution {
funmaxDistinctElements(nums: IntArray, k: Int): Int {
nums.sort()
val used = mutableSetOf<Int>()
for (num in nums) {
for (x in num - k..num + k) {
if (x !in used) {
used.add(x)
break }
}
}
return used.size
}
}
1
2
3
4
5
6
7
8
9
10
classSolution:
defmaxDistinctElements(self, nums: list[int], k: int) -> int:
nums.sort()
used = set()
for num in nums:
for x in range(num - k, num + k +1):
if x notin used:
used.add(x)
breakreturn len(used)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use std::collections::HashSet;
impl Solution {
pubfnmax_distinct_elements(mut nums: Vec<i32>, k: i32) -> i32 {
nums.sort();
letmut used = HashSet::new();
for&num in&nums {
for x in num - k..=num + k {
if!used.contains(&x) {
used.insert(x);
break;
}
}
}
used.len() asi32 }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
classSolution {
maxDistinctElements(nums: number[], k: number):number {
nums.sort((a, b) =>a-b);
constused=newSet<number>();
for (constnumofnums) {
for (letx=num-k; x<=num+k; x++) {
if (!used.has(x)) {
used.add(x);
break;
}
}
}
returnused.size;
}
}