题目描述
要求在N个不重复的整数中,找出第K大的整数 ,其中0<K<N<1000000
输入
输入第一行为两个正整数N K
第二行为N个整数,输入保证这N个整数两两相异,每个整数的范围在-1000000到1000000之间
输出
输出第K大的整数值
样例输入
5 3
3 2 4 5 1
样例输出
3
代码如下:
1 #include<iostream> 2 #include<math.h> 3 #include<string.h> 4 #include<stdio.h> 5 using namespace std; 6 7 int arr[1000000]; 8 9 int devide(int begin,int end) 10 { 11 int key=arr[begin]; 12 int low=begin; 13 int high=end; 14 while(low<high) 15 { 16 while(low<high && arr[high]>=key) 17 high--; 18 arr[low]=arr[high]; 19 while(low<high && arr[low]<=key) 20 low++; 21 arr[high]=arr[low]; 22 } 23 arr[low]=key; 24 return low; 25 } 26 27 int Find(int begin,int end,int k) 28 { 29 int index=devide(begin,end); 30 if(index==end-k+1) 31 return index; 32 else if(index<end-k+1) 33 return Find(index+1,end,k); 34 else if(index>end-k+1) 35 return Find(begin,index-1,index-(end-k+1)); 36 // return Find(begin,index,k-1); 37 } 38 39 int main() 40 { 41 int n,k; 42 cin>>n>>k; 43 memset(arr,0,sizeof(arr)); 44 for(int i=0;i<n;i++) 45 cin>>arr[i]; 46 int index=Find(0,n,k); 47 cout<<arr[index]<<endl; 48 }