問題の解決策:
知識ポイント:
-
両端キュー:キューの両端には、データ構造とすることができます/デキュー。
-
Pythonの両端キュー(両端キュー)にカプセル化:
要素を追加します
どちらかの端から要素を追加両端キューサポート。
- )(延びる右端から複数の要素を追加します
- APPEND()は右端から要素を追加します
- extendleft()の逆入力に注意し、左端から複数の要素を追加します
- appendleft()は左端から要素を追加します
要素を取得します
- ポップ()右から要素を削除します
- popleft()左から要素を削除
しますが、異なるスレッドで同時に両端から要素を削除することができますので、両端キューは、スレッドセーフであることに注意してください。
します。https://www.jianshu.com/p/6928e420edb0から上記の引用
私はこの質問を考えました:
- チームへの順序で待ち行列の主な要素
- すなわち、両端キュー内は、両端キュー内部の初期化は、要素、キュー内の要素は、それがそうでなければ、キュー内部の要素がデキューされるバックエンキュー要素をエンキュー未満であれば後ろエンキュー要素をエンキュー要素が降順であります
- 両端キュールール要素に戻し、ステップ2のように示されています
- これは、現在の最大の内部キュー、チームとヘッド位置両端キュー内の最大の要素の主な要素を識別するために、リアルタイムで可能に
達成:キューを使用してのpythonパッケージとキュー両端キュー
コードを次のとおりです。
import queue
class MaxQueue:
def __init__(self):
self.queue = queue.Queue()
self.deque = queue.deque()
def max_value(self):
return self.deque[0] if self.deque else -1
def push_back(self, value):
while self.deque and self.deque[-1] < value:
self.deque.pop()
self.deque.append(value)
self.queue.put(value)
def pop_front(self):
if not self.deque: return -1
ans = self.queue.get()
#判断双端队列是否和主队列首元素相等,如果相等,最大值队列元素出队
if ans == self.deque[0]:
self.deque.popleft()
return ans
2を達成します:pythonキューリストと両端キューを使用しました。
コードは以下の通りであります:
class MaxQueue:
def __init__(self):
self.queue = []
self.max_queue = []
def max_value(self):
return self.max_queue[0] if self.max_queue else -1
def push_back(self, value):
while self.max_queue and self.max_queue[-1] < value:
self.max_queue = self.max_queue[0:-1]
self.max_queue.append(value)
self.queue.append(value)
def pop_front(self):
if not self.max_queue: return -1
ans = self.queue.pop(0)
#判断存储最大值的队列是否和主队列首元素相等,如果相等,最大值队列元素出队
if ans == self.max_queue[0]:
self.max_queue.pop(0)
return ans