LeetCode215. Kth Largest Element
2018-08-06 本文已影响0人
好读书_不恘甚解
问题描述:给定一个数组,和数组长度以内的K值,返回第K大的数.

刚开始我想到了冒泡排序,然后就用冒泡排序解了一下,代码如下:
class Solution {
public int findKthLargest(int[] nums, int k) {
for (int i = 0; i < nums.length-1; i++) {//外层循环控制排序趟数
for (int j = 0; j < nums.length - 1 - i; j++) {//内层循环控制每一趟排序多少次
if (nums[j] > nums[j + 1]) {
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
return nums[nums.length-k];
}
}
具体冒泡排序思路可以参考:https://www.cnblogs.com/shen-hua/p/5422676.html
这个解法虽然可行,但是速度很慢,因为冒泡排序每排序一次,都会产生一个最大的数,所以我根据问题,对这个冒泡排序修改了一下,我们需要的是第k大的数,所以我们只需要排序K次就可以得到第K大的数,修改之后,运行时间缩短了一半,代码如下:
class Solution {
public int findKthLargest(int[] nums, int k) {
for (int i = 0; i < k; i++) {
for (int j = 0; j < nums.length - 1 - i; j++) {
if (nums[j] > nums[j + 1]) {
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
return nums[nums.length-k];
}
}