class Solution { public: int quick_sort_version(vector<int>& nums, int k,int begin,int end,int len) { if(end-begin<1) return nums[begin];//这里有点小意外,本来写的是nums[0],这是不对的,比如案例[1,2],k=1 int res_beg=begin,res_end=end;//快排 bool flag=true; while(res_beg!=res_end) { if(nums[res_beg]>nums[res_end]) { int temp=nums[res_beg]; nums[res_beg]=nums[res_end]; nums[res_end]=temp; if(flag) res_beg++; else res_end--; flag=!flag; } else { if(flag) res_end--; else res_beg++; } } if(len-res_beg>k-1)//如果右面数比k-1多,就只在右面查找 return quick_sort_version(nums,k,res_beg+1,end,len); else if(len-res_beg<k-1)//比k-1少,就只在桌面查找 return quick_sort_version(nums,k,begin,res_beg,len); else//如果刚好相等,直接返回这个数值即可 return nums[res_beg]; } int findKthLargest(vector<int>& nums, int k) { int len=nums.size(); return quick_sort_version(nums,k,0,len-1,len-1);//类似快排 } };
分析:
知识迁移啊。