Menu
CoddyTech

Luyện tập #3

Bài học 12 trên 14 trong khóa học Heap và hàng đợi ưu tiên: loạt bài về cấu trúc dữ liệu #7 của Coddy.

challenge icon

Thử thách

Dễ

Viết một hàm (function) kthSmallest nhận một mảng số nguyên arr và một số nguyên dương k, rồi trả về giá trị nhỏ thứ k (đánh chỉ số từ 1). Vì vậy, k = 1 trả về giá trị nhỏ nhất, k = 2 trả về giá trị nhỏ thứ hai, cứ thế tiếp tục.

Nếu k nằm ngoài giới hạn (nhỏ hơn 1 hoặc lớn hơn độ dài mảng), hãy trả về -1.

Bạn phải dùng lớp MinHeap (được cung cấp trong minheap.<ext>) — không dùng các hàm dựng sẵn của ngôn ngữ như sort, slice hoặc thư viện heap trong thư viện chuẩn để tính kết quả.

Tự làm thử

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include "solution.h"

int main() {
    char line[8192];
    char tline[64];
    if (!fgets(line, sizeof(line), stdin)) line[0] = '\0';
    if (!fgets(tline, sizeof(tline), stdin)) tline[0] = '\0';
    int arr[4096];
    int n = 0;
    char* tok = strtok(line, " \t\r\n");
    while (tok) { arr[n++] = atoi(tok); tok = strtok(NULL, " \t\r\n"); }
    int k = atoi(tline);
    int r = kthSmallest(arr, n, k);
    printf("%d\n", r);
    return 0;
}

Tất cả bài học trong Heap và hàng đợi ưu tiên: loạt bài về cấu trúc dữ liệu #7

Tự luyện tập: Trình biên dịch C online