/*
* 算法思想:
* 使用大顶堆的特性,构建大顶堆,构建K次大顶堆,算法时间复杂度为KlogN;
*
*/
void swap(int *a, int *b){
int c = *a;
*a = *b;
*b = c;
}
void heap_adjust(int *arr, int len, int index) {
if(index<0 || index>len || 2*index+1 >= len)
return;
int max = 2*index+1;
if(max+1 < len && arr[max+1] > arr[max])
max++;
if(arr[max] > arr[index]){
swap(&arr[max], &arr[index]);
heap_adjust(arr, len, max);
}
}
int findKthLargest(int* arr, int len, int k){
int i;
for(i=len/2; i>=0; i--)
heap_adjust(arr, len, i);
for(i=0; i<k; i++){
heap_adjust(arr, len-i, 0);
swap(&arr[0], &arr[len-i-1]);
}
return arr[len-1-k+1];
}
LeetCode-215-数组中的第K个最大元素-C语言
最新推荐文章于 2024-05-26 09:00:00 发布