Top k Largest Numbers
public class Solution {
/**
* @param nums: an integer array
* @param k: An integer
* @return: the top k largest numbers in array
*/
public int[] topk(int[] nums, int k) {
// write your code here
quickSort(nums, 0, nums.length - 1, k);
int[] topk = new int[k];
for(int i = 0; i < k; i++) {
topk[i] = nums[i];
}
return topk;
}
private void quickSort(int[] A, int start, int end, int k) {
if(start >= end) {
return ;
}
if(start >= k) {
return;
}
int left = start, right = end;
// pivot
Random rand = new Random(end - start + 1);
int index = rand.nextInt(end - start + 1) + start;
int pivot = A[index];
while(left <= right) {
while(left <= right && A[left] > pivot) {
left++;
}
while(left <= right && A[right] < pivot) {
right--;
}
if(left <= right) {
int temp = A[left];
A[left] = A[right];
A[right] = temp;
left++;
right--;
}
}
quickSort(A, start, right, k);
quickSort(A, left, end, k);
}
}
最后更新于
这有帮助吗?