Leetcode Top Interview 150 Heap
Leetcode Top Interview 150 Heap¶
這個分類中主要的應用是heap queue ,以下是python說明文件
這個堆疊queue有的一個特性是他預設第一的root 值會是最小,如果後續加入其他數值,依舊會照大小去排列
#例如先宣告一個具有heapq特性的pqpq = []heappush(pq, [2,1,6,5])#然後呼叫heappop(),就可以拿到最小值heappop(pq) #output 1
常用的特性有幾種
- 找最小值(最直觀的)
- 找最大值: 這時候再存入數值可以加上一個負號(最大就會變最小),例如Leetcode 373
- 透過heap 只會依據第一個index排序,因此可以把其他需要的值放在後面的index,例如Leetcode 502
#例如目前口袋有特定點數,只能去超過該點數的地方才能拿到新的點數,在特定走訪次數下找最大值pq = [] # default min-heapcity = {}for i in range(len(capital)): if capital[i] not in city: city[capital[i]] = [profits[i]] else: city[capital[i]].append(profits[i])"""上面是要用來創一個dict,紀錄該點數才可以造訪的profit"""last = min(city)big = max(city)+1cur = wfor _ in range(k): #走訪限定的次數k,while也可以 for i in range(last,min(cur+1,big)): #避免timeout設的條件 if i in city: #假設當下的i 是有點數可以拿的地方 for j in city[i]: #把這個有點數可以拿的地方用負值放入,因為需要拿到最大值 heappush(pq,-j) # push data if not pq: #如果pq已經拿完,強制結束 break last = cur+1 cur-=heappop(pq) #加上這次得到的(因為前處理是負數,改成減號)#cur就是目標值
- 找medium,這時候可以透過兩個que,以及長度的比對,去找到medium,例如Leetcode 295
需要辨認出這樣的題目需要用到heap的特性,然後也需要合併使用其他特性達到目的。
Comments
Loading comments…
Leave a Comment