LeetCode 622. Design Circular Queue

原题链接在这里:https://leetcode.com/problems/design-circular-queue/

题目:

Design your implementation of the circular queue. The circular queue is a linear data structure in which the operations are performed based on FIFO (First In First Out) principle and the last position is connected back to the first position to make a circle. It is also called "Ring Buffer".

One of the benefits of the circular queue is that we can make use of the spaces in front of the queue. In a normal queue, once the queue becomes full, we cannot insert the next element even if there is a space in front of the queue. But using the circular queue, we can use the space to store new values.

Your implementation should support following operations:

  • MyCircularQueue(k): Constructor, set the size of the queue to be k.
  • Front: Get the front item from the queue. If the queue is empty, return -1.
  • Rear: Get the last item from the queue. If the queue is empty, return -1.
  • enQueue(value): Insert an element into the circular queue. Return true if the operation is successful.
  • deQueue(): Delete an element from the circular queue. Return true if the operation is successful.
  • isEmpty(): Checks whether the circular queue is empty or not.
  • isFull(): Checks whether the circular queue is full or not.

Example:

MyCircularQueue circularQueue = new MyCircularQueue(3); // set the size to be 3
circularQueue.enQueue(1);  // return true
circularQueue.enQueue(2);  // return true
circularQueue.enQueue(3);  // return true
circularQueue.enQueue(4);  // return false, the queue is full
circularQueue.Rear();  // return 3
circularQueue.isFull();  // return true
circularQueue.deQueue();  // return true
circularQueue.enQueue(4);  // return true
circularQueue.Rear();  // return 4

Note:

  • All values will be in the range of [0, 1000].
  • The number of operations will be in the range of [1, 1000].
  • Please do not use the built-in Queue library.

题解:

Use an array to mimic queue.

Have start to pointing to start of queue.

Have end to poining to end of queue.

Have len to keep track of size.

When enQueue, end = (end + 1) % k, assign arr[end].

When deQueue, start = (start + 1) % k.

Rear() return arr[end].

Front() return arr[start].

Time Complexity: MyCircularQueue, O(1). endQueue, O(1). deQueue(), O(1). Front, O(1). Rear, O(1). isEmpty, O(1). isFull, O(1).

Space: O(k).

AC Java:

 1 class MyCircularQueue {
 2     int [] arr;
 3     int start;
 4     int end;
 5     int len;
 6     int k;
 7
 8     /** Initialize your data structure here. Set the size of the queue to be k. */
 9     public MyCircularQueue(int k) {
10         arr = new int[k];
11         start = 0;
12         end = -1;
13         len = 0;
14         this.k = k;
15     }
16
17     /** Insert an element into the circular queue. Return true if the operation is successful. */
18     public boolean enQueue(int value) {
19         if(isFull()){
20             return false;
21         }
22
23         end = (end + 1) % k;
24         len++;
25         arr[end] = value;
26         return true;
27     }
28
29     /** Delete an element from the circular queue. Return true if the operation is successful. */
30     public boolean deQueue() {
31         if(isEmpty()){
32             return false;
33         }
34
35         start = (start + 1) % k;
36         len--;
37         return true;
38     }
39
40     /** Get the front item from the queue. */
41     public int Front() {
42         return isEmpty() ? -1 : arr[start];
43     }
44
45     /** Get the last item from the queue. */
46     public int Rear() {
47         return isEmpty() ? -1 : arr[end];
48     }
49
50     /** Checks whether the circular queue is empty or not. */
51     public boolean isEmpty() {
52         return len == 0;
53     }
54
55     /** Checks whether the circular queue is full or not. */
56     public boolean isFull() {
57         return len == k;
58     }
59 }
60
61 /**
62  * Your MyCircularQueue object will be instantiated and called as such:
63  * MyCircularQueue obj = new MyCircularQueue(k);
64  * boolean param_1 = obj.enQueue(value);
65  * boolean param_2 = obj.deQueue();
66  * int param_3 = obj.Front();
67  * int param_4 = obj.Rear();
68  * boolean param_5 = obj.isEmpty();
69  * boolean param_6 = obj.isFull();
70  */

类似Design Circular Deque.

原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/12079370.html

时间: 2024-07-31 22:23:53

LeetCode 622. Design Circular Queue的相关文章

LeetCode 641. Design Circular Deque

原题链接在这里:https://leetcode.com/problems/design-circular-deque/ 题目: Design your implementation of the circular double-ended queue (deque). Your implementation should support following operations: MyCircularDeque(k): Constructor, set the size of the dequ

[LeetCode] Design Circular Queue 设计环形队列

Design your implementation of the circular queue. The circular queue is a linear data structure in which the operations are performed based on FIFO (First In First Out) principle and the last position is connected back to the first position to make a

循环队列(Circular Queue)

循环队列(Circular Queue) 1. 循环队列的概念 1.1 循环队列的定义 为了能够充分地使用数组中的存储空间,克服"假溢出"现象,可以把数组的前端和后端连接起来,形成一个环形的表,即把存储队列元素的表从逻辑上看成一个环,成为循环队列(circular queue). 1.2 循环队列中各元素的逻辑及存储关系 循环队列的首尾相接,当队头指针front和队尾指针rear进到maxSize-1后,再前进一个位置就自动到0.这可以利用除法取余的运算(%)来实现. (1)队头指针进

LeetCode 1188. Design Bounded Blocking Queue

原题链接在这里:https://leetcode.com/problems/design-bounded-blocking-queue/ 题目: Implement a thread safe bounded blocking queue that has the following methods: BoundedBlockingQueue(int capacity) The constructor initializes the queue with a maximum capacity.

Design Circular Deque

Design your implementation of the circular double-ended queue (deque). Your implementation should support following operations: MyCircularDeque(k): Constructor, set the size of the deque to be k. insertFront(): Adds an item at the front of Deque. Ret

LeetCode 604. Design Compressed String Iterator (设计压缩字符迭代器)

Design and implement a data structure for a compressed string iterator. It should support the following operations: next and hasNext. The given compressed string will be in the form of each letter followed by a positive integer representing the numbe

【一天一道LeetCode】#232. Implement Queue using Stacks

一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Implement the following operations of a queue using stacks. push(x) – Push element x to the back of queue. pop() – Removes the element from in front of queue

leetcode 355 Design Twitte

题目连接 https://leetcode.com/problems/design-twitter Design Twitte Description Design a simplified version of Twitter where users can post tweets, follow/unfollow another user and is able to see the 10 most recent tweets in the user’s news feed. Your de

Leetcode 362: Design Hit Counter

Design a hit counter which counts the number of hits received in the past 5 minutes. Each function accepts a timestamp parameter (in seconds granularity) and you may assume that calls are being made to the system in chronological order (ie, the times