什么是优先队列?[面试7.0]
优先队列的底层是一个二叉堆(完全二叉树),并且是一个利用数组实现的完全二叉树
数组里的每一个元素有可能是其他元素的父节点,也有可能是其他元素的子节点
特性:
数组里的第一个元素array[0]拥有最高的优先级给定一个下标i
父节点对应元素的下标是(i - 1)/2
左子节点对应的元素下标是2i + 1
右侧子节点对应的元素下标是2i + 2
数组中每个元素的优先级都必须要高于它两侧子节点
基本操作:
向上筛选: 新数据首先放到二叉堆底部,然后向上比较和父节点的优先级,若高于父节点就交换节点(需要O(logK))的时间
向下筛选: 堆顶的元素被取出时,父节点和两个子节点对比优先级,若子节点的优先级别高则将该父节点和该子节点交换,然后反复进行直到无法交换为止(需要O(logK))的时间