2017.9.14
昨天做了一整天的题。。。。。。
首先使用了冒泡排序,我知道会超时。但还是做了一遍,心想复习一下旧的知识也是极好的。于是,果然超时了。但是毫不气馁。
想,要不用快速排序试一试。但是自作聪明的以为这题一定是在考堆排序。
然而堆排序是我最不会的排序方式,但还是下定决心开始学习。
好不容易学会了之后,果然超时,而且丝毫显示不出相对于冒泡排序的优点。
我心里想着,一定是我采用的结构不对。不用树的结构了,用数组的结构。
一通忙活之后,果然还是超时。我真的是就不淡定了。
但是穷则思变。
最后的最后,我说要不还是试一试牛乎乎的快排吧。
却弱智的发现,我连快排的方法都记得有些模糊了。
递归调用的时候,参数也出现了一些失误。真的是要被这个心里觉得很简单的题虐惨了。
不过今天早晨一来实验室,用了2分钟,结果就出来了。还是非常开心的呢。
class Solution {
/*
* @param k : description of k
* @param nums : array of nums
* @return: description of return
*/
public static int kthLargestElement(int k, int[] nums) {
// write your code here
if( k <= 0 || k > nums.length){
return -1;
}
int low = 0;
int height = nums.length-1;
int flag = quickSort(nums,low,height);
k = nums.length - k + 1;
while(flag != k-1){
if(flag < k-1){
low = flag + 1;
flag = quickSort(nums,low,height);
}
else{
height = flag -1;
flag = quickSort(nums,low,height);
}
}
return nums[k-1];
}
public static int quickSort(int []nums,int low,int height){
int tmp = nums[height];
while(low < height){
while(low < height && nums[low] < tmp){
low ++;
}
nums[height] = nums[low];
height--;
while(low < height && nums[height] > tmp){
height--;
}
nums[low] = nums[height];
}
nums[low] = tmp;
return low;
}
};