From 2ff4530d57c7bbe4e6f15dc24062226c758a56de Mon Sep 17 00:00:00 2001 From: MSanjanaa <2400033265@kluniversity.in> Date: Sat, 1 Nov 2025 17:40:10 +0530 Subject: [PATCH] Create kth element --- create kth element | 77 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 create kth element diff --git a/create kth element b/create kth element new file mode 100644 index 000000000..f9cb2ddcb --- /dev/null +++ b/create kth element @@ -0,0 +1,77 @@ +typedef struct +{ + int *heap; // Min-heap to store k largest elements + int size; // Current number of elements in heap + int capacity; // Maximum size (k) +} KthLargest; +int kthLargestAdd(KthLargest* kth, int val); +KthLargest* kthLargestCreate(int k, int* nums, int numsSize) +{ + KthLargest *kth = (KthLargest*)malloc(sizeof(KthLargest)); + kth->heap = (int*)malloc(sizeof(int) * k); + kth->size = 0; + kth->capacity = k; + for (int i = 0; i < numsSize; i++) + { + kthLargestAdd(kth, nums[i]); + } + return kth; +} +int kthLargestAdd(KthLargest* kth, int val) +{ + if (kth->size < kth->capacity) + { + int i = kth->size; + kth->heap[kth->size++] = val; + while (i > 0) + { + int parent = (i - 1) / 2; + if (kth->heap[i] < kth->heap[parent]) + { + int temp = kth->heap[i]; + kth->heap[i] = kth->heap[parent]; + kth->heap[parent] = temp; + i = parent; + } + else { + break; + } + } + } + else if (val > kth->heap[0]) + { + kth->heap[0] = val; + int i = 0; + while (1) + { + int left = 2 * i + 1; + int right = 2 * i + 2; + int smallest = i; + + if (left < kth->size && kth->heap[left] < kth->heap[smallest]) + { + smallest = left; + } + if (right < kth->size && kth->heap[right] < kth->heap[smallest]) + { + smallest = right; + } + if (smallest != i) + { + int temp = kth->heap[i]; + kth->heap[i] = kth->heap[smallest]; + kth->heap[smallest] = temp; + i = smallest; + } + else { + break; + } + } + } + return kth->heap[0]; +} +void kthLargestFree(KthLargest* kth) +{ + free(kth->heap); + free(kth); +}