堆
Y·Not·Try
这个作者很懒,什么都没留下…
展开
-
断金条-贪心算法
一块金条切成两半,是需要花费和长度数值一样的铜板的。比如 长度为20的 金条,不管切成长度多大的两半,都要花费20个铜 板。一群人想整分整块金 条,怎么分最省铜板? 例如,给定数组{10,20,30},代表一共三个人,整块金条长度为 10+20+30=60. 金条要分成10,20,30三个部分。 如果, 先把长 度60的金条分成10和50,花费60 再把长度50的金条分成20和30, 花费50 一共花费110铜板。 但是如果, 先把长度60的金条分成30和30,花费60 再把长度30 金条分成10和20,花原创 2020-10-05 13:22:29 · 163 阅读 · 0 评论 -
随时确定中位数
思路: 设置一个大根堆和一个小根堆,大根堆力求存储N/2部分的小值,小根堆力求存储N/2部分的大值,保持此状态后,哪个堆的值多则中位数就是哪个堆的堆顶元素。 如何保持均衡分布? 每次进入的值和大根堆的堆顶元素比较,当其值大于大根堆时,进入小根堆,当两者的值相差大于等于2时,多的一个堆出堆顶元素赋值给小的堆。、 整个过程对于python可以使用heapq简易实现。 ...原创 2020-10-05 11:40:01 · 134 阅读 · 0 评论 -
堆排序
堆排序的过程: 1.创建初始堆。 2.将堆的最后一个元素和堆顶元素交换,减少堆的范围, 调整堆。 class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: len_nums = len(nums) for i in range(len_nums//2-1, -1, -1): self.adjust_heap(nums, i, len_nums原创 2020-09-17 11:37:43 · 118 阅读 · 0 评论