当前位置 博文首页 > zcy_wxy的博客:215. 数组中的第K个最大元素
这道题主要思路是 根据k的值得大小来决定是从左边开始冒泡还是从后边开始冒泡,代码如下
package easy;
public class FindKthLargest {
public static void main(String[] args) {
System.out.println(new FindKthLargest().findKthLargest(new int[]{3,2,1,5,6,4},1));
}
public int findKthLargest(int[] nums, int k) {
int len=nums.length;
if (k*2<len){
return bubbleRight(nums,k,len);
}
return bubbleLeft(nums,len-k+1,len);
}
private int bubbleLeft(int[] nums, int k, int len) {
int min;
int lastIndex;
for (int i = 0; i < k; i++) {
min=nums[i];
lastIndex=-1;
for (int j = i; j < len; j++) {
if (nums[j]<min){
min=nums[j];
lastIndex=j;
}
}
if (lastIndex<0){
continue;
}
nums[lastIndex]=nums[i];
nums[i]=min;
}
return nums[k-1];
}
private int bubbleRight(int[] nums, int k, int len) {
int max;
int lastIndex;
int end=len;
for (int i = 0; i < k; i++) {
lastIndex=-1;
max=nums[end-1];
for (int j = 0; j < end; j++) {
if (nums[j]>max){
max=nums[j];
lastIndex=j;
}
}
if (lastIndex<0){
continue;
}
nums[lastIndex]=nums[len-i-1];
nums[len-i-1]=max;
end--;
}
return nums[len-k];
}
}
?
cs