#define MIN_DATE -1
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(sizeof(int) * (max_size + 1));
h->capacity = max_size;
h->size = 0;
h->elements[0] = MIN_DATE;
return h;
}
void build(Heap h, int* arr, int arrSize)
{
for (int i = 1; i <= arrSize; i++)
{
h->elements[i] = arr[i - 1];
}
h->size = arrSize;
for (int i = h->size / 2; i > 0; i--)
{
int parent, child, 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_min(Heap h)
{
int parent, child, temp, min_element;
min_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 min_element;
}
int* getLeastNumbers(int* arr, int arrSize, int k, int* returnSize)
{
int* ret = malloc(k * sizeof(int));
*returnSize = k;
Heap h = create(arrSize);
build(h, arr, arrSize);
for (int i = 0; k > 0; i++, k--)
{
ret[i] = delete_min(h);
}
return ret;
}
剑指 Offer 40. 最小的k个数
最新推荐文章于 2024-01-19 11:41:56 发布