题解 | #寻找第K大#
寻找第K大
https://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param a int整型一维数组
* @param aLen int a数组长度
* @param n int整型
* @param K int整型
* @return int整型
*/
void swap( int* a , int i , int max){
int t =a[i];
a[i] = a[max];
a[max] = t;
}
void heapify(int* a , int aLen , int i){
int c1 = 2*i + 1;
int c2 = 2*i + 2;
int max = i;
if(c1 < aLen && a[max] < a[c1]) max = c1;
if(c2 < aLen && a[max] < a[c2]) max = c2;
if(max != i){
swap(a , i , max);
heapify(a , aLen , max);
}
}
//排序入口
void heap_sort(int* a , int aLen){
//建堆
for(int i = (aLen - 2) / 2 ; i >= 0 ; i--){
heapify(a , aLen , i);
}
//排序
for(int i = aLen - 1 ; i > 0 ; i--){
swap(a , i ,0);
heapify(a , i , 0);
}
}
int findKth(int* a, int aLen, int n, int K ) {
// write code here
for(int i = 0 ; i < aLen ; i++){
printf("%d " , a[i]);
}
printf("\n");
heap_sort(a, aLen);
return a[n-K];
}
文远知行公司福利 555人发布