5 - 第k大元素

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;
	}
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值