Skip to content

Latest commit

 

History

History
114 lines (94 loc) · 2.28 KB

622.design-circular-queue.md

File metadata and controls

114 lines (94 loc) · 2.28 KB

Clarification Questions

  • No, it's clear from problem description.

Test Cases

Normal Cases

Input: 
Output: 

Edge / Corner Cases

Input: 
Output: 
class MyCircularQueue(k: Int) {

    private val arrays = IntArray(k)
    private var front = 0
    private var rear = -1
    private var size = 0
    
    fun enQueue(value: Int): Boolean {
        if (isFull()) return false
        rear = (rear + 1) % arrays.size
        // Or we can rotate the pointer to the beginning
        // rear++
        // if (rear >= k) rear = 0
        arrays[rear] = value
        size++
        return true
    }

    fun deQueue(): Boolean {
        if (isEmpty()) return false
        front = (front + 1) % arrays.size
        // Or we can rotate the pointer
        // front++
        // if (front >= k) front = 0
        size--
        return true
    }

    fun Front(): Int {
        if (isEmpty()) return -1
        return arrays[front]
    }

    fun Rear(): Int {
        if (isEmpty()) return -1
        return arrays[rear]
    }

    fun isEmpty(): Boolean {
        return size == 0
    }

    fun isFull(): Boolean {
        return size == arrays.size
    }
}

Or we can derive rear from front + size in static array so that we don't have to maintain rear property:

class MyCircularQueue(k: Int) {

    private val arrays = IntArray(k)
    private var front = 0
    private var size = 0
    
    fun enQueue(value: Int): Boolean {
        if (isFull()) return false
        arrays[(front + size) % size] = value
        size++
        return true
    }

    fun deQueue(): Boolean {
        if (isEmpty()) return false
        front = (front + 1) % arrays.size
        size--
        return true
    }

    fun Front(): Int {
        if (isEmpty()) return -1
        return arrays[front]
    }

    fun Rear(): Int {
        if (isEmpty()) return -1
        return arrays[(front + size - 1) % size]
    }

    fun isEmpty(): Boolean {
        return size == 0
    }

    fun isFull(): Boolean {
        return size == arrays.size
    }
}

Edge Cases

  • Call Front() or Rear() when queue is empty.
  • Call enQueue() when queue is full.
  • Call deQueue() when queue is empty.