leetcode интервью вопросов 59 -. II максимум очередь (Python)

Here Вставка рисунка Описание
Решение проблемы :

Точки знаний:

  1. Deque: оба конца очереди может быть структурой данных / из очереди.

  2. Герметичный в питоне (DEQUE деке):

    Добавление элементов

    Deque поддерживает добавление элементов с любого конца.

    • расширить () добавить несколько элементов с правого конца
    • Append () добавляет элемент с правого конца
    • extendleft (), чтобы добавить множество элементов с левым конца, обратите внимание на обратный ввод
    • appendleft () добавляет элемент с левого конца

    Получает элемент

    • поп () Удаляет элемент с правой стороны
    • popleft () удалить элемент из левой
      ноты, Deque потокобезопасно, так что вы можете удалить элементы с обоих концов одновременно в разных потоках.

    Вышеприведенная цитата из: https: //www.jianshu.com/p/6928e420edb0

Я думал, что этот вопрос:

  1. Основные элементы очереди в порядке в команде
  2. Deque внутренняя инициализации епдиеего элемент, за элемент в очереди, если элемент в очереди меньше, чем епдиеий В противном случае, элементы внутренней очереди из очереди обратно в очередь элемента; т.е. внутри деку элементы находятся в порядке убывания
  3. Назад в Deque правила элемента показан как два шага
  4. Это позволяет в режиме реального времени, чтобы определить основные элементы текущего максимальной внутренней очереди, наибольший элемент в команде и положения головы дека

Достичь: пакет питона с использованием очередей и дека очереди
код выглядит следующим образом :

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: Использование списка очереди питона и Deque;

Код выглядит следующим образом:

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
Опубликовано 100 оригинальных статей · вона похвала 3 · просмотров 10000 +

рекомендация

отblog.csdn.net/cy_believ/article/details/104911265
рекомендация