Python 查找最小值并使用堆数据结构对列表进行一些计算
我正在研究堆并在hackarank中尝试了一个问题 问题是找到在列表中达到某个值K所需的次数。如果任何值小于K:则将前两个最小值相加,并放置新值,而不是这两个值 我已经完成了解决方案的编码。但是,请说明我可以做些什么来提高代码的运行速度 我的代码:Python 查找最小值并使用堆数据结构对列表进行一些计算,python,sorting,heap,Python,Sorting,Heap,我正在研究堆并在hackarank中尝试了一个问题 问题是找到在列表中达到某个值K所需的次数。如果任何值小于K:则将前两个最小值相加,并放置新值,而不是这两个值 我已经完成了解决方案的编码。但是,请说明我可以做些什么来提高代码的运行速度 我的代码: import heapq as heap data = map (int, raw_input ().strip ().split ()) N, K = data [0], data [1] cookies = map (int, raw_inp
import heapq as heap
data = map (int, raw_input ().strip ().split ())
N, K = data [0], data [1]
cookies = map (int, raw_input ().strip ().split ())
heap.heapify (cookies)
numOps = 0
possibility = False
while cookies [0] < K:
if N == 1:
possibility = True
break
leastSweetCookies = heap.nsmallest (2, cookies)
heap.heapreplace (cookies, leastSweetCookies [0] + 2 * leastSweetCookies [1])
heap.heappop (cookies)
numOps += 1
N -= 1
if possibility == False: print numOps
else: print -1
将heapq导入为堆
data=map(int,原始输入().strip().split())
N、 K=数据[0],数据[1]
cookies=map(int,原始输入().strip().split())
heap.heapify(cookies)
numOps=0
可能性=错误
而cookies[0]
这三行:
leastSweetCookies = heap.nsmallest (2, cookies)
heap.heapreplace (cookies, leastSweetCookies [0] + 2 * leastSweetCookies [1])
heap.heappop (cookies)
相当于:
sw1 = heap.heappop(cookies);
sw2 = heap.heappop(cookies);
heap.heappush(cookies, sw1 + 2*sw2);
在您的代码中,对nsmallest
的调用可能会迭代整个堆,以找到最小的两个项。然后是一个O(logn)来替换顶部元素,O(logn)来弹出最小的元素
在替换代码中,两个POP中的每一个都是O(logn),推送是O(logn)。因此:
你的代码:O(n)+O(logn)+O(logn)
我的代码:O(logn)+O(logn)+O(logn)