牛客题霸 [寻找第K大] C++题解/答案
生活随笔
收集整理的這篇文章主要介紹了
牛客题霸 [寻找第K大] C++题解/答案
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
牛客題霸 [尋找第K大] C++題解/答案
題目描述
有一個整數數組,請你根據快速排序的思路,找出數組中第K大的數。
給定一個整數數組a,同時給定它的大小n和要找的K(K在1到n之間),請返回第K大的數,保證答案存在。
題目:
利用快排+二分
題解:
class Finder { public:int findKth(vector<int> a, int n, int K) {// write code here、return find(a,0,n-1,n-K+1);}int find(vector<int>&a,int l,int r,int K){if(l==r) return a[l];int i=l-1;int j=r+1;int x=a[l+r>>1];while(i<j){do i++;while(a[i]<x);do j--;while(x<a[j]);if(i<j) swap(a[i],a[j]);}int s=j-l+1;if(K<=s) return find(a,l,j,K);else return find(a,j+1,r,K-s);} };總結
以上是生活随笔為你收集整理的牛客题霸 [寻找第K大] C++题解/答案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛客题霸 [括号序列] C++题解/答案
- 下一篇: 牛客题霸 [在二叉树中找到两个节点的最近