class Solution {
Map<Integer, Integer> map = new HashMap<>();
public int[] topKFrequent(int[] nums, int k) {
int length = nums.length;
for (int i = 0; i < length; i++) {
map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);
}
int[] array = new int[map.size()];
int count = 0;
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
array[count] = entry.getKey();
count++;
}
quickSort(array, 0, array.length - 1, k);
int[] result = new int[k];
System.arraycopy(array, array.length - k, result, 0, k);
return result;
}
public void quickSort(int[] array, int left, int right, int k) {
if (left < right) {
int pviotPosition = partition(array, left, right);
if (pviotPosition == array.length - k) {
return;
} else if (pviotPosition > array.length - k){
quickSort(array, left, pviotPosition - 1, k);
} else {
quickSort(array, pviotPosition + 1, right, k);
}
}
}
public int partition(int[] array, int left, int right) {
swap(left, (left + right) / 2);
int pviotNum = array[left];
while (left < right) {
while (left < right && map.get(array[right]) >= map.get(pviotNum)) {
right--;
}
array[left] = array[right];
while (left < right && map.get(array[left]) <= map.get(pviotNum)) {
left++;
}
array[right] = array[left];
}
array[left] = pviotNum;
return left;
}
public void swap(int a, int b) {
if (a != b) {
int temp = a;
a = b;
b = temp;
}
}
}
LeetCode347_前 K 个高频元素_排序_快速排序_经典快排代码好理解版
最新推荐文章于 2024-09-26 00:03:11 发布
本文介绍了一种使用Java实现的解决方案,通过HashMap统计输入整数数组中每个元素的频率,然后利用快速排序优化找到出现频率最高的前k个元素。重点讲解了`topKFrequent`方法、`quickSort`和`partition`函数的工作原理。
摘要由CSDN通过智能技术生成