您的位置:首页 > 其它

215.Kth Largest Element in an Array

2015-06-26 21:12 239 查看
思路:

分治法,其实思路跟动态规划基本一样,只不过用递归的方式去解决问题。

总结分治法的框架就是:solve函数(相当于动态规划的状态划分函数,这个比较关键,找到了,问题基本就解决了)+递归使用(相当于动态规划的递推关系)。

本题的solve函数是一遍快排。

class Solution {

public:

        //递归的使用一遍快排,直到前面的的数刚好凑够k个。

        int solve(vector<int>::iterator iter,int len,int k){

                if(len==1) return *iter;

                int counter=0;

                int key=*iter;

                int low=0,high=len-1;

                while(low<high){

                        while(low<high && *(iter+high)<key){

                                high--;

                        }

                        *(iter+low)=*(iter+high);

                        while(low<high && *(iter+low)>=key){

                                low++;

                        }

                        *(iter+high)=*(iter+low);

                }

                *(iter+low)=key;

                if(low==k-1)

                        return key;

                else if(low>k-1){

                        solve(iter,low,k);

                }else{

                        solve(iter+low+1,len-low-1,k-low-1);

                }

        }

        //接口函数

        int findKthLargest(vector<int>& nums, int k) {

                int len=nums.size();

                if(k<1 || k>len) return -1;

                int result=solve(nums.begin(),len,k);

                return result;

        }

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: