题解 | #寻找第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]; }