Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Kth Largest Element ใน Array ด้วย Python

หาค่าที่เป็นอันดับ k จากมากไปน้อยในอาร์เรย์ unsorted

ตัวอย่าง

Input: nums = [3,2,1,5,6,4], k = 2
Output: 5

หลายวิธีแก้

วิธีTimeSpaceหมายเหตุ
Sort แล้ว取 indexO(n log n)O(1) หรือ O(n)ง่ายที่สุด
Min-Heap ขนาด kO(n log k)O(k)เหมาะ k << n
QuickSelectO(n) averageO(1)ซับซ้อนกว่า

โค้ดง่ายที่สุด (Sort)

class Solution:
    def findKthLargest(self, nums, k):
        nums.sort(reverse=True)
        return nums[k-1]

# ทดสอบ
sol = Solution()
print(sol.findKthLargest([56,14,7,98,32,12,11,50,45,78,7,5,69], 5))  # 50

โค้ด Heap (แนะนำสำหรับ k เล็ก)

import heapq

class Solution:
    def findKthLargest(self, nums, k):
        return heapq.nlargest(k, nums)[-1]

# หรือ manual heap
def findKthLargest(nums, k):
    heap = nums[:k]
    heapq.heapify(heap)
    for n in nums[k:]:
        if n > heap[0]:
            heapq.heapreplace(heap, n)
    return heap[0]

สรุป

ใช้ heapq.nlargest หรือ sort ตรงไปตรงมา QuickSelect ใช้เมื่อต้องการ O(n) worst-case guarantee