LeetCode刷题 --215数组中第k大的元素
题目描述:
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
题解一:快速排序
class Solution {
public int findKthLargest(int[] nums, int k) {
int target=nums.length-k;
int l=0,r=nums.length-1;
int result=0;
while(l<r){
result=patition(nums,l,r);
if(result==target){
break;
}else if(result<target){
l=result+1;
}else {
r=result-1;
}
}
return nums[target];
}
public int patition(int[] a,int l,int r){
int x=a[l];//取最左侧的元素作为判定
int i=l,j=r+1;
while(true){
while(a[++i]<x&&i<r);
while(a[--j]>x&&j>l);
if(i>=j){
break;
}
swap(a,i,j);
}
swap(a,l,j);
return j;
}
public void swap(int[] a,int m,int n){
int temp=0;
temp=a[n];
a[n]=a[m];
a[m]=temp;
}
}
重点在与partition函数的算法