cuốn sách gpt4 ai đã làm

thuật toán - Hợp nhất danh sách liên kết được sắp xếp K, tại sao độ phức tạp là O(N * K * K), không phải O(N * K)

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 04:37:57 28 4
mua khóa gpt4 Nike

Tôi có giải pháp sau đây, nhưng tôi nghe được từ những người bình luận khác rằng đó là O(N * K * K),而不是 O(N * K)其中 N Đúng K độ dài (tối đa) của danh sách,K là số lượng danh sách. Ví dụ, đưa ra danh sách [1, 2, 3][4, 5],N là 3 và K Đó là 2.

/**
* Định nghĩa danh sách liên kết đơn.
* lớp công khai ListNode {
* giá trị int;
* ListNode tiếp theo;
* ListNode(int x) { val = x }
* }
*/
Giải pháp lớp {
khoảng trống riêng tư trước (ListNode cuối cùng [] listNodes, chỉ mục int cuối cùng) {
listNodes[index] = listNodes[index].next;
}

công khai ListNode mergeKLists(ListNode cuối cùng[] listNodes) {
ListNode được sắp xếpListHead = null;
ListNode được sắp xếpListNode = null;

int liên kết Index;

LÀM {
int minValue = Số nguyên.MAX_VALUE;
chỉ số liên kết = -1;

for (int listIndex = 0; listIndex < listNodes.length; listIndex++) {
ListNode cuối cùng listNode = listNodes[listIndex];

if (listNode != null && listNode.val < minValue) {
minValue = listNode.val;
liên kết Index = listIndex;
}
}

if (liên kếtIndex != -1) {
if (sortListNode == null) {
được sắp xếpListNode = ListNode mới (minValue);
đã sắp xếpListHead = đã sắp xếpListNode;
}
khác {
được sắp xếpListNode.next = ListNode mới (minValue);
sắp xếpListNode = sắp xếpListNode.next;
}

nâng cao (listNodes, chỉ số liên kết);
}
}
trong khi (liên kếtIndex != -1);

trả về đã sắp xếpListHead;
}
}

Lý do của tôi là làm trong khi Phần thân của vòng lặp sẽ xuất hiện N lần (vì làm trong khi Điều kiện dừng của vòng lặp là khi danh sách dài nhất đã được lặp lại), trong khi làm trong khi hình tròn for Thân vòng lặp sẽ xuất hiện K hạng hai(listNodes.length),sản xuất O(n*k).

Tại sao giải pháp trênO(n * k * k)Vải len?

câu trả lời hay nhất

Danh sách kết quả của bạn sẽ chứa nhiều nhất n * k dự án. Chi phí để thêm mỗi hạng mục là O(k)(Thực hiện vòng lặp bên trong k Lặp lại để kiểm tra phần đầu của mỗi danh sách). Do đó, tổng thời gian chạy là O(n * k * k).

Về thuật toán - hợp nhất các danh sách liên kết được sắp xếp K, tại sao độ phức tạp lại là O(N * K * K) thay vì O(N * K)? https://stackoverflow.com/questions/53454615/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress