-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathmain.go
63 lines (52 loc) · 1.23 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package main
type MyCalendar struct {
data [][]int
}
func Constructor() MyCalendar {
return MyCalendar{}
}
func (this *MyCalendar) Book(start int, end int) bool {
if len(this.data) == 0 {
this.data = append(this.data, []int{start, end})
return true
}
for _, meeting := range this.data {
if !(start >= meeting[1] || end <= meeting[0]) {
return false
}
}
for i, meeting := range this.data {
if end < meeting[0] {
if i == 0 {
this.data = append([][]int{{start, end}}, this.data...)
return true
}
if this.data[i-1][1] == start {
this.data[i-1][1] = end
return true
}
tmp := make([][]int, len(this.data)-i)
copy(tmp, this.data[i:])
this.data = append(append(this.data[:i], []int{start, end}), tmp...)
return true
}
if end == meeting[0] {
if i == 0 || this.data[i-1][1] != start {
this.data[i][0] = start
return true
}
if this.data[i-1][1] == start {
this.data[i][0] = this.data[i-1][0]
this.data = append(this.data[:i-1], this.data[i:]...)
return true
}
}
}
this.data = append(this.data, []int{start, end})
return true
}
/**
* Your MyCalendar object will be instantiated and called as such:
* obj := Constructor();
* param_1 := obj.Book(start,end);
*/