Skip to content

Commit 1d5b343

Browse files
committed
Add Biweekly 40
1 parent efbd8e4 commit 1d5b343

File tree

2 files changed

+185
-0
lines changed

2 files changed

+185
-0
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package leetcode
2+
3+
type FrontMiddleBackQueue struct {
4+
Queue []int
5+
Length int
6+
}
7+
8+
func Constructor() FrontMiddleBackQueue {
9+
return FrontMiddleBackQueue{Queue: make([]int, 0), Length: 0}
10+
}
11+
12+
func (this *FrontMiddleBackQueue) PushFront(val int) {
13+
tmp := make([]int, this.Length+1)
14+
copy(tmp[1:], this.Queue)
15+
tmp[0] = val
16+
this.Queue = tmp
17+
this.Length++
18+
}
19+
20+
func (this *FrontMiddleBackQueue) PushMiddle(val int) {
21+
tmp := make([]int, this.Length+1)
22+
idx := this.Length / 2
23+
copy(tmp[:idx], this.Queue[:idx])
24+
tmp[idx] = val
25+
copy(tmp[idx+1:], this.Queue[idx:])
26+
this.Queue = tmp
27+
this.Length++
28+
}
29+
30+
func (this *FrontMiddleBackQueue) PushBack(val int) {
31+
this.Queue = append(this.Queue, val)
32+
this.Length++
33+
}
34+
35+
func (this *FrontMiddleBackQueue) PopFront() int {
36+
if this.Length == 0 {
37+
return -1
38+
}
39+
res := this.Queue[0]
40+
this.Queue = this.Queue[1:]
41+
this.Length--
42+
return res
43+
}
44+
45+
func (this *FrontMiddleBackQueue) PopMiddle() int {
46+
if this.Length == 0 {
47+
return -1
48+
}
49+
mid := (this.Length - 1) / 2
50+
res := this.Queue[mid]
51+
tmp := make([]int, len(this.Queue)-1)
52+
copy(tmp[:mid], this.Queue[:mid])
53+
copy(tmp[mid:], this.Queue[mid+1:])
54+
this.Queue = tmp
55+
this.Length--
56+
return res
57+
}
58+
59+
func (this *FrontMiddleBackQueue) PopBack() int {
60+
if this.Length == 0 {
61+
return -1
62+
}
63+
res := this.Queue[this.Length-1]
64+
this.Queue = this.Queue[:this.Length-1]
65+
this.Length--
66+
return res
67+
}
68+
69+
/**
70+
* Your FrontMiddleBackQueue object will be instantiated and called as such:
71+
* obj := Constructor();
72+
* obj.PushFront(val);
73+
* obj.PushMiddle(val);
74+
* obj.PushBack(val);
75+
* param_4 := obj.PopFront();
76+
* param_5 := obj.PopMiddle();
77+
* param_6 := obj.PopBack();
78+
*/
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package leetcode
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
)
7+
8+
func Test_Problem707(t *testing.T) {
9+
obj := Constructor()
10+
fmt.Printf("obj = %v %v\n", MList2Ints(&obj), obj)
11+
obj.PushFront(1)
12+
fmt.Printf("obj = %v %v\n", MList2Ints(&obj), obj)
13+
obj.PushBack(2)
14+
fmt.Printf("obj = %v\n", MList2Ints(&obj))
15+
obj.PushMiddle(3)
16+
fmt.Printf("obj = %v\n", MList2Ints(&obj))
17+
obj.PushMiddle(4)
18+
fmt.Printf("obj = %v\n", MList2Ints(&obj))
19+
param1 := obj.PopFront()
20+
fmt.Printf("param1 = %v obj = %v\n", param1, MList2Ints(&obj))
21+
param1 = obj.PopMiddle()
22+
fmt.Printf("param1 = %v obj = %v\n", param1, MList2Ints(&obj))
23+
param1 = obj.PopMiddle()
24+
fmt.Printf("param1 = %v obj = %v\n", param1, MList2Ints(&obj))
25+
param1 = obj.PopBack()
26+
fmt.Printf("param1 = %v obj = %v\n", param1, MList2Ints(&obj))
27+
param1 = obj.PopFront()
28+
fmt.Printf("param1 = %v obj = %v\n", param1, MList2Ints(&obj))
29+
fmt.Printf("-----------------------------------------------------------------\n")
30+
obj = Constructor()
31+
fmt.Printf("obj = %v %v\n", MList2Ints(&obj), obj)
32+
obj.PushFront(1)
33+
fmt.Printf("obj = %v %v\n", MList2Ints(&obj), obj)
34+
obj.PushFront(2)
35+
fmt.Printf("obj = %v %v\n", MList2Ints(&obj), obj)
36+
obj.PushFront(3)
37+
fmt.Printf("obj = %v %v\n", MList2Ints(&obj), obj)
38+
obj.PushFront(4)
39+
fmt.Printf("obj = %v %v\n", MList2Ints(&obj), obj)
40+
param1 = obj.PopBack()
41+
fmt.Printf("param1 = %v obj = %v\n", param1, MList2Ints(&obj))
42+
param1 = obj.PopBack()
43+
fmt.Printf("param1 = %v obj = %v\n", param1, MList2Ints(&obj))
44+
param1 = obj.PopBack()
45+
fmt.Printf("param1 = %v obj = %v\n", param1, MList2Ints(&obj))
46+
param1 = obj.PopBack()
47+
fmt.Printf("param1 = %v obj = %v\n", param1, MList2Ints(&obj))
48+
fmt.Printf("-----------------------------------------------------------------\n")
49+
obj = Constructor()
50+
fmt.Printf("obj = %v %v\n", MList2Ints(&obj), obj)
51+
obj.PushMiddle(1)
52+
fmt.Printf("obj = %v\n", MList2Ints(&obj))
53+
obj.PushMiddle(2)
54+
fmt.Printf("obj = %v\n", MList2Ints(&obj))
55+
obj.PushMiddle(3)
56+
fmt.Printf("obj = %v\n", MList2Ints(&obj))
57+
param1 = obj.PopMiddle()
58+
fmt.Printf("param1 = %v obj = %v\n", param1, MList2Ints(&obj))
59+
param1 = obj.PopMiddle()
60+
fmt.Printf("param1 = %v obj = %v\n", param1, MList2Ints(&obj))
61+
param1 = obj.PopMiddle()
62+
fmt.Printf("param1 = %v obj = %v\n", param1, MList2Ints(&obj))
63+
fmt.Printf("-----------------------------------------------------------------\n")
64+
obj = Constructor()
65+
fmt.Printf("obj = %v %v\n", MList2Ints(&obj), obj)
66+
obj.PushMiddle(8)
67+
fmt.Printf("obj = %v\n", MList2Ints(&obj))
68+
param1 = obj.PopMiddle()
69+
fmt.Printf("param1 = %v obj = %v\n", param1, MList2Ints(&obj))
70+
param1 = obj.PopFront()
71+
fmt.Printf("param1 = %v obj = %v\n", param1, MList2Ints(&obj))
72+
param1 = obj.PopBack()
73+
fmt.Printf("param1 = %v obj = %v\n", param1, MList2Ints(&obj))
74+
param1 = obj.PopMiddle()
75+
fmt.Printf("param1 = %v obj = %v\n", param1, MList2Ints(&obj))
76+
obj.PushMiddle(1)
77+
fmt.Printf("obj = %v\n", MList2Ints(&obj))
78+
obj.PushMiddle(10)
79+
fmt.Printf("obj = %v\n", MList2Ints(&obj))
80+
fmt.Printf("-----------------------------------------------------------------\n")
81+
obj = Constructor()
82+
fmt.Printf("obj = %v %v\n", MList2Ints(&obj), obj)
83+
param1 = obj.PopMiddle()
84+
fmt.Printf("param1 = %v obj = %v\n", param1, MList2Ints(&obj))
85+
obj.PushMiddle(3)
86+
fmt.Printf("obj = %v %v\n", MList2Ints(&obj), obj)
87+
obj.PushFront(6)
88+
fmt.Printf("obj = %v %v\n", MList2Ints(&obj), obj)
89+
obj.PushMiddle(6)
90+
fmt.Printf("obj = %v %v\n", MList2Ints(&obj), obj)
91+
obj.PushMiddle(3)
92+
fmt.Printf("obj = %v %v\n", MList2Ints(&obj), obj)
93+
param1 = obj.PopMiddle()
94+
fmt.Printf("param1 = %v obj = %v %v\n", param1, MList2Ints(&obj), obj)
95+
obj.PushMiddle(7)
96+
fmt.Printf("obj = %v %v\n", MList2Ints(&obj), obj)
97+
param1 = obj.PopMiddle()
98+
fmt.Printf("param1 = %v obj = %v %v\n", param1, MList2Ints(&obj), obj)
99+
obj.PushMiddle(8)
100+
fmt.Printf("obj = %v %v\n", MList2Ints(&obj), obj)
101+
// ["FrontMiddleBackQueue","popMiddle","pushMiddle","pushFront","pushMiddle","pushMiddle","popMiddle","pushMiddle","popMiddle","pushMiddle"]
102+
// [[],[],[3],[6],[6],[3],[],[7],[],[8]]
103+
}
104+
105+
func MList2Ints(head *FrontMiddleBackQueue) []int {
106+
return head.Queue
107+
}

0 commit comments

Comments
 (0)