You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义heapify实现求解数组第K大元素出错原因排查

数组中的第K个最大元素堆实现问题

我在解决数组中的第K个最大元素问题时,选择手动实现堆来完成,而非直接使用内置堆结构。我的代码如下:

def findKthLargest(self, nums: List[int], k: int) -> int:
    
    def heapify(nums: List[int], i: int):
        print(nums, i)
        
        largest = i
        left = (2 * i) + 1
        right = (2 * i) + 2
        
        if left < len(nums) and nums[largest] < nums[left]:
            largest = left
        if right < len(nums) and nums[largest] < nums[right]:
            largest = right
        
        if largest != i:
            nums[i], nums[largest] = nums[largest], nums[i]
            print(nums)
            heapify(nums, largest)
    
    print(nums)
    for i in range(len(nums)-1, -1, -1):
        heapify(nums, i)
    print(nums)
    
    return nums[k-1]

这段代码参考了官方题解的实现,官方题解代码如下:

def max_heapify(heap_size, index):
    left, right = 2 * index + 1, 2 * index + 2
    largest = index
    if left < heap_size and lst[left] > lst[largest]:
        largest = left
    if right < heap_size and lst[right] > lst[largest]:
        largest = right
    if largest != index:
        lst[index], lst[largest] = lst[largest], lst[index]
        max_heapify(heap_size, largest)

# heapify original lst
for i in range(len(lst) // 2 - 1, -1, -1):
    max_heapify(len(lst), i)

我的代码仅通过了21/41个测试用例,比如在输入:

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

时,返回结果是3,但正确答案应该是4。我的代码运行打印输出如下:

[3, 2, 3, 1, 2, 4, 5, 5, 6]
[3, 2, 3, 1, 2, 4, 5, 5, 6] 8
[3, 2, 3, 1, 2, 4, 5, 5, 6] 7
[3, 2, 3, 1, 2, 4, 5, 5, 6] 6
[3, 2, 3, 1, 2, 4, 5, 5, 6] 5
[3, 2, 3, 1, 2, 4, 5, 5, 6] 4
[3, 2, 3, 1, 2, 4, 5, 5, 6] 3
[3, 2, 3, 6, 2, 4, 5, 5, 1]
[3, 2, 3, 6, 2, 4, 5, 5, 1] 8
[3, 2, 3, 6, 2, 4, 5, 5, 1] 2
[3, 2, 5, 6, 2, 4, 3, 5, 1]
[3, 2, 5, 6, 2, 4, 3, 5, 1] 6
[3, 2, 5, 6, 2, 4, 3, 5, 1] 1
[3, 6, 5, 2, 2, 4, 3, 5, 1]
[3, 6, 5, 2, 2, 4, 3, 5, 1] 3
[3, 6, 5, 5, 2, 4, 3, 2, 1]
[3, 6, 5, 5, 2, 4, 3, 2, 1] 7
[3, 6, 5, 5, 2, 4, 3, 2, 1] 0
[6, 3, 5, 5, 2, 4, 3, 2, 1]
[6, 3, 5, 5, 2, 4, 3, 2, 1] 1
[6, 5, 5, 3, 2, 4, 3, 2, 1]
[6, 5, 5, 3, 2, 4, 3, 2, 1] 3
[6, 5, 5, 3, 2, 4, 3, 2, 1]

我注意到索引5处的4在初始几次迭代后从未被调整,请问这是为什么?我遗漏了什么?希望得到帮助。


内容的提问来源于stack exchange,提问作者Hemanth Annavarapu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:27:05