【数组类算法】:第k大元素

问题描述:

在数组中找到第k大的元素

样例:给出数组[9,3,2,4,8],第三大的元素是4;给出数组 [1,2,3,4,5],第一大的元素是5,第二大的元素是4,第三大的元素是3,以此类推

挑战:要求时间复杂度为O(n),空间复杂度为O(1)

算法设计:

首先对这个数列使用快速排序算法进行从大到小排序,然后再遍历寻找第k大数据。此算法的重点难点应该在于快速排序

public class Model_KthLargestElement {
 
    public static int kthLargestElement(int k, ArrayList numbers) {
        if(numbers==null||numbers.size()==0||numbers.size() Quick(ArrayList numbers,int left,int right){
        
        if(numbers==null||numbers.size()==0){
            return null;
        }
 
        //左边游标
        int pos=left;
        //右边游标
        int i=right;
        //起到交换作用
        int temp=0;
        
        do{
            //如果pos后面的数比pos大,或者pos前面的数比pos大,则相交换;
            if((i>=pos&&numbers.get(i)>=numbers.get(pos))||(ipos){
                i--;
            }else{
                i++;
            }
        }while(ipos+1){
            Quick(numbers,pos+1,right);
        }
           
        return numbers;

 

你可能感兴趣的:(算法)