解题思路:先指定关键字,根据关键字用双指针交换大于key和小于key的值,根据k的位置判断向哪边排序。
class Solution { int getKMax(int l ,int r ,int k,int[] nums){ // System.out.println(l+" "+r+" "+k); if(l>=r){ return nums[l]; } int key=nums[l]; int i=l,j=r; while(i<j){ while(nums[j]>=key&&i<j){ j-=1; } while(nums[i]<=key&&i<j){ i+=1; } int t=nums[j]; nums[j]=nums[i]; nums[i]=t; } nums[l]=nums[i]; nums[i]=key; if(k>i){ return getKMax(i+1,r,k,nums); } else if(k==i){ return nums[i]; } else{ return getKMax(l,i-1,k,nums); } } public int findKthLargest(int[] nums, int k) { int n=nums.length; return getKMax(0,n-1,n-k,nums); } }
215. 数组中的第K个最大元素
最新推荐文章于 2024-10-10 22:59:02 发布