LeetCode——質問 641 (Python): 循環両端キューを設計する

トピック

両端キューを設計して実装します。
実装では次の操作をサポートする必要があります。

  • MyCircularDeque(k): コンストラクター、両端キューのサイズは k です。
  • insertFront(): 両端キューの先頭に要素を追加します。操作が成功した場合は true を返します。
  • insertLast():両端キューの末尾に要素を追加します。操作が成功した場合は true を返します。
  • deleteFront():両端キューの先頭から要素を削除します。操作が成功した場合は true を返します。
  • deleteLast(): 両端キューの末尾から要素を削除します。操作が成功した場合は true を返します。
  • getFront():両端キューの先頭から要素を取得します。デキューが空の場合は、-1 が返されます。
  • getRear():両端キューの最後の要素を取得します。デキューが空の場合は、-1 が返されます。
  • isEmpty():両端キューが空かどうかを確認します。
  • isFull(): 両端キューがいっぱいかどうかを確認します。

MyCircularDequecircularDeque = new MycircularDeque(3); // 容量サイズを 3 に設定します
circularDeque.insertLast(1); // true を返します
circularDeque.insertLast(2); // true を返す<​​/span>
circularDeque.insertFront(3); // true を返す<​​/span>circularDeque.deleteLast(); // true を返す<​​/span>circularDeque.insertFront(4); // true を返す<​​/span>circularDeque.getFront(); // 4 を返す<​​/span>circularDeque.isFull(); // true を返しますcircularDeque.getRear(); // 2 を返します
circularDeque.insertFront(4); //すでにいっぱいの場合、 false を返します




ヒント
  • すべての値は [1, 1000] の範囲内にあります
  • 演算範囲は[1,1000]です。
  • 組み込みの DEQUE ライブラリは使用しないでください。
正常に実行されるコード
class MyCircularDeque(object):

    def __init__(self, k):
        """
        Initialize your data structure here. Set the size of the deque to be k.
        :type k: int
        """
        self.capacity = k+1 
        self.start = self.rear = 0 
        self.queue = [float('inf')] * self.capacity
        
    def insertFront(self, value):
        if self.isFull():    
            return False
        else:
            if self.isEmpty() : 
                self.queue[self.start] = value
                self.rear += 1 
            else:
                index = (self.start -1 ) % self.capacity
                self.queue[index]  = value
                self.start = index
        return True

    def insertLast(self, value):
        if self.isFull():
            return False
        else:
            self.queue[self.rear]  = value
            self.rear = (self.rear + 1) % self.capacity
        return True

    def deleteFront(self):
        if self.isEmpty():
            return False
        else:   
            self.start  = (self.start + 1) % self.capacity
        return True

    def deleteLast(self):
        if self.isEmpty():
            return False
        else:   
            self.rear  = (self.rear - 1) % self.capacity
            self.queue[self.rear] = float('inf')
        return True

    def getFront(self):
        if self.isEmpty():
            return -1 #注意这里是-1 而不是False
        else:
            return self.queue[self.start]

    def getRear(self):
        if self.isEmpty():#要带扩号
            print "empty"
            return -1
        index = (self.rear -1 ) % self.capacity
        return self.queue[index]
        

    def isEmpty(self):
        if self.start == self.rear:
            return True
        else:
            return False

    def isFull(self):
        if (self.rear + 1) % self.capacity == self.start: 
            return True
        else:
            return False

# Your MyCircularDeque object will be instantiated and called as such:
# obj = MyCircularDeque(k)
# param_1 = obj.insertFront(value)
# param_2 = obj.insertLast(value)
# param_3 = obj.deleteFront()
# param_4 = obj.deleteLast()
# param_5 = obj.getFront()
# param_6 = obj.getRear()
# param_7 = obj.isEmpty()
# param_8 = obj.isFull()
演算結果

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/weixin_45398231/article/details/105143808