题目链接:https://leetcode.com/problems/kth-largest-element-in-an-array/
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
Example 1:
Input: [3,2,1,5,6,4]
and k = 2
Output: 5
Example 2:
Input: [3,2,3,1,2,4,5,5,6]
and k = 4
Output: 4
Note:
You may assume k is always valid, 1 ≤ k ≤ array's length.
思路:
快排的思路,不断缩小范围,把大的放左侧,把小的放右侧,时间复杂度O(n)。
AC:
class Solution {
public int findKthLargest(int[] nums, int k) {
int left=0,right=nums.length-1;
while(true){
int ans=quickSort(nums,left,right);
if(ans==k-1)//第二大元素,在数组中下标为2-1=1
return nums[ans];
else if(ans>k-1)
right=ans-1;
else
left=ans+1;
}
}
public int quickSort(int[] nums,int left,int right){
if(left<=right){
int i=left,j=right,pivot=nums[left];//从i开始,左侧第一个为哨兵
while(i<j){//此处代码的具体来源见算法导论
while(i<j&&nums[j]<pivot)//转j
j--;//找j
if(i<j)
nums[i++]=nums[j];//赋值给i
while(i<j&&nums[i]>pivot)
i++;//找下一个i
if(i<j)
nums[j--]=nums[i];//赋值给j
}
nums[i]=pivot;
return i;
}else
return -1;
}
}