Leetcode Top Interview 150 Heap

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就是目標值
  1. 找medium,這時候可以透過兩個que,以及長度的比對,去找到medium,例如Leetcode 295

需要辨認出這樣的題目需要用到heap的特性,然後也需要合併使用其他特性達到目的。

Comments

Loading comments…

Leave a Comment