#define MAX_DATE 10000
typedef struct heap_type* Heap;
struct heap_type
{
int capacity;
int size;
int* elements;
};
Heap create(int max_size)
{
Heap h = malloc(sizeof(struct heap_type));
h->elements = malloc((max_size + 1) * sizeof(int));
h->capacity = max_size;
h->size = 0;
h->elements[0] = MAX_DATE;
return h;
}
void build(Heap h, int* nums, int numsSize)
{
for (int i = 1; i <= numsSize; i++)
{
h->elements[i] = nums[i - 1];
}
h->size = numsSize;
for (int i = h->size / 2; i > 0; i--)
{
int parent, child;
int temp = h->elements[i];
for (parent = i; parent * 2 <= h->size; parent = child)
{
child = parent * 2;
if (child != h->size && h->elements[child + 1] > h->elements[child])
{
child++;
}
if (temp >= h->elements[child])
{
break;
}
else
{
h->elements[parent] = h->elements[child];
}
}
h->elements[parent] = temp;
}
}
int delete_max(Heap h)
{
int child, parent, max_element, temp;
max_element = h->elements[1];
temp = h->elements[h->size];
(h->size)--;
for (parent = 1; parent * 2 <= h->size; parent = child)
{
child = parent * 2;
if (child != h->size && h->elements[child + 1] > h->elements[child])
{
child++;
}
if (temp >= h->elements[child])
{
break;
}
else
{
h->elements[parent] = h->elements[child];
}
}
h->elements[parent] = temp;
return max_element;
}
int findKthLargest(int* nums, int numsSize, int k)
{
int temp;
Heap h = create(numsSize);
build(h, nums, numsSize);
while (k > 0)
{
temp = delete_max(h);
k--;
}
return temp;
}
215. 数组中的第K个最大元素
最新推荐文章于 2024-06-12 10:00:23 发布