Skip to content

Commit 2624b0c

Browse files
committed
solution to 622
1 parent 9e8094c commit 2624b0c

File tree

2 files changed

+50
-4
lines changed

2 files changed

+50
-4
lines changed

src/unresolved/622.design-circular-queue.jl renamed to src/problems/622.design-circular-queue.jl

+34-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# ---
22
# title: 622. Design Circular Queue
33
# id: problem622
4-
# author: Tian Jun
5-
# date: 2020-10-31
4+
# author: zhwang
5+
# date: 2022-08-04
66
# difficulty: Medium
77
# categories: Design, Queue
88
# link: <https://leetcode.com/problems/design-circular-queue/description/>
@@ -59,5 +59,35 @@
5959
## @lc code=start
6060
using LeetCode
6161

62-
## add your code here:
63-
## @lc code=end
62+
mutable struct MyCircularQueue
63+
len::Int
64+
front::Int
65+
rear::Int
66+
arr::Vector{Int} ## use one extra position
67+
MyCircularQueue(k::Int) = new(k + 1, 1, 1, Vector{Int}(undef, k + 1))
68+
end
69+
70+
is_full(que::MyCircularQueue) = (que.rear + 1 - que.front) % que.len == 0
71+
72+
function en_queue(que::MyCircularQueue, val::Int)
73+
is_full(que) && return false
74+
que.arr[que.rear] = val
75+
que.rear = que.rear % que.len + 1
76+
return true
77+
end
78+
79+
is_empty(que::MyCircularQueue) = que.front == que.rear
80+
81+
function de_queue(que::MyCircularQueue)
82+
is_empty(que) && return false
83+
que.front = que.front % que.len + 1
84+
return true
85+
end
86+
87+
front(que::MyCircularQueue) = is_empty(que) ? -1 : que.arr[que.front]
88+
function rear(que::MyCircularQueue)
89+
is_empty(que) && return -1
90+
return que.arr[mod(que.rear - 2, que.len) + 1] ## use mod instead of % to avoid negative number
91+
end
92+
93+
## @lc code=end
+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
@testset "622.design-circular-queue.jl" begin
2+
function check622(k::Int, funcs::Vector{String}, paras::Vector, reses::Vector)
3+
que = MyCircularQueue(k)
4+
all(eval(Meta.parse(func))(que, para...) == res for (func, para, res) in zip(funcs, paras, reses))
5+
end
6+
## test 1
7+
funcs = ["en_queue","en_queue","en_queue","en_queue","rear","is_full","de_queue","en_queue","rear"]
8+
paras = [[1],[2],[3],[4],[],[],[],[4],[]]
9+
reses = [true,true,true,false,3,true,true,true,4]
10+
@test check622(3, funcs, paras, reses)
11+
12+
funcs = ["en_queue", "rear", "front", "de_queue", "front", "de_queue", "front", "en_queue", "en_queue", "en_queue", "en_queue"]
13+
paras = [[2],[],[],[],[],[],[],[4],[2],[2],[3]]
14+
reses = [true,2,2,true,-1,false,-1,true,true,true,false]
15+
@test check622(3, funcs, paras, reses)
16+
end

0 commit comments

Comments
 (0)