[アルゴリズム]より辛い
5357 ワード
1.質問
2.私の回答
import heapq
def solution(scoville, k):
heap = []
answer = 0
for num in scoville:
heapq.heappush(heap, num)
while heap[0] < k:
try:
heapq.heappush(heap, heapq.heappop(heap) + heapq.heappop(heap) * 2)
answer += 1
except IndexError:
answer=-1
break
return answer
これはグーグルの助けで解決できる問題です.sortの後、私はアルゴリズムを考え出して、前の2つの数字を取り出して、新しいスコビルを生成しましたが、ずっと効率的に失敗していました.Google検索では、一般的なheapq
リストとは異なり、push
、pop
を検索するたびに自動的にソートされるやつが存在することが分かった.これにより、ソートコストが削減され、効率の問題が解決されます.すべての食品のスコビル指数が
K
以上に達しない場合、-1
はreturn
である.なかなか思いつかない状況.最初は0
が2つしか存在しないと思っていた場合がありましたが、考えてみれば、食べ物を混ぜても1つしか残っていない場合もありますし、K
未満の場合もあります.上記の状況はIndexError
によって解決された.3.他人の回答
import heapq as hq
def solution(scoville, K):
hq.heapify(scoville)
answer = 0
while True:
first = hq.heappop(scoville)
if first >= K:
break
if len(scoville) == 0:
return -1
second = hq.heappop(scoville)
hq.heappush(scoville, first + second*2)
answer += 1
return answer
他の人もほとんどheapq
を使って問題を解いています.以上のコードで学んだのは,for
文を用いずにリストをheapify
構造に変更できることである.また,heap
を用いず,IndexError
を用いた場合,len == 0
を得る方法も興味深い.4.勉強するところ
python heapモジュールの使用
Reference
この問題について([アルゴリズム]より辛い), 我々は、より多くの情報をここで見つけました https://velog.io/@joi0104/알고리즘-더맵게テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol