Uriel's Corner

Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
posts - 0, comments - 50, trackbacks - 0, articles - 594
给出一列数,一共可以实施k个操作,每次可以将其中一个数减去floor(piles[i] / 2),问k次操作之后剩下的数字和最小是多少
思路:用优先队列保存经过x次操作之后的数字,用python的heapq写起来就很方便,每次操作直接用heapreplace把heap顶的数减半替代原值即可(比先pop,改值之后再push要快,beat 100%)
因为heapq是最小堆,所以建堆时先将所有数取负

 1 #2279
 2 #Runtime: 3519 ms (Beats 100%)
 3 #Memory: 26 MB (Beats 37.21%)
 4 
 5 class Solution(object):
 6     def minStoneSum(self, piles, k):
 7         """
 8         :type piles: List[int]
 9         :type k: int
10         :rtype: int
11         """
12         hq = [-x for x in piles]
13         heapify(hq)
14         for _ in range(k):
15             heapreplace(hq, hq[0] // 2)
16         return -sum(hq)

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理