lintcode - 堆化

    xiaoxiao2023-02-01  17

    题目描述:给出一个整数数组,堆化操作就是把它变成一个最小堆数组。对于堆数组A,A[0]是堆的根,并对于每个A[i],A [i * 2 + 1]是A[i]的左儿子并且A[i * 2 + 2]是A[i]的右儿子。

    样例:给出 [3,2,1,4,5],返回[1,2,3,4,5] 或者任何一个合法的堆数组

    有关堆数组的实现,我在另一篇博文中有详细的论述:堆的实现与优先队列。所以,讲解此处略,只是给出答案代码:

    class Solution: # @param A: Given an integer array # @return: void def heapify(self, A): n = len(A) for i in range(n): cur = i par = (i - 1) // 2 while par >= 0 and A[par] > A[cur]: A[par], A[cur] = A[cur], A[par] cur = par par = (cur - 1) // 2 其实,lintcode的题目的描述中没有说清楚如下要求:对数组A原地更新,并且函数的返回值为None

    转载请注明原文地址: https://ju.6miu.com/read-1138572.html
    最新回复(0)