0
点赞
收藏
分享

微信扫一扫

剑指 Offer II 076. 数组中的第 k 大的数字

三次方 2021-09-21 阅读 22
今日算法
题目描述:
示例 1:
示例 2:
题目分析:
  • 求第k个最大的元素,而不是第 k 个不同的元素。例如数组[5,3,3,2,1]中,第二大,第三大的元素都是3
思路一:
代码实现:
class Solution {

public int findKthLargest(int[] nums, int num) {
Arrays.sort(nums); // 突然忘记倒序的写法了。。。所以用了len - k.
int len = nums.length;
return nums[len - num];
}
}
思路二:
代码实现:
class Solution {
public int result = 0;
public int k = 0;
public int findKthLargest(int[] nums, int num) {
k = num;
quickSort(nums, 0, nums.length - 1);
return result;
}
public void quickSort(int[] arr, int start, int end) {

int pivot = arr[start];
int left = start;
int right = end;
while (left < right) {
while (left < right && pivot > arr[right]) {
right--;
}
while (left < right && pivot <= arr[left]) {
left++;
}
if (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
arr[start] = arr[left];
arr[left] = pivot;
if (left == (k - 1)) {
result = arr[left];
}
// 判断第k大的数是否在基准数的左边.
if (left > (k - 1)) {
quickSort(arr, start, left - 1);
}
// 判断第k大的数是否在基准数的右边.
if (left < (k - 1)) {
quickSort(arr, left + 1, end);
}
}
}
举报

相关推荐

0 条评论