QUESTION:
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例 2:
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 说明:
你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
EXPLANATION:
一开始看到这题的时候确实很懵,这不是只要排序下,然后从后往前数k个就可以了吗。会这么简单吗?因为排序有时间复杂度,那么会不会有时间复杂度的限制?算了,还是先写上看看吧,然后,就ac了。
回过头想了一下,因为只需要k个数,那么完全可以采用冒泡排序的方式,直接冒泡出k个数,这样的话,虽然最差的情况是O(n^2),但是有好多情况其实并不会到那个地步。但是,arrays.sort排序,jdk1.6之前采用的是经典快排,时间复杂度是O(nlogn),而,1.7之后更是采用了Dual-Pivot QuickSort,新的快排方式,所以两者的差距也并不是很明显。
SOLUTION:
class Solution {
public int findKthLargest(int[] nums, int k) {
Arrays.sort(nums);
return nums[nums.length-k];
}
}