File tree 3 files changed +130
-13
lines changed
Leetcode/0703.Kth-Largest-Element-in-a-Stream
3 files changed +130
-13
lines changed Original file line number Diff line number Diff line change @@ -123,7 +123,62 @@ Acceptance Rate
123
123
https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0703.Kth-Largest-Element-in-a-Stream/main.go
124
124
125
125
``` go
126
-
126
+ package kthlargestelementinastream
127
+
128
+ import (
129
+ " container/heap"
130
+ " sort"
131
+ )
132
+
133
+ /* *
134
+ * Your KthLargest object will be instantiated and called as such:
135
+ * obj := Constructor(k, nums);
136
+ * param_1 := obj.Add(val);
137
+ */
138
+
139
+ // 時間複雜 O(), 空間複雜 O()
140
+ type KthLargest struct {
141
+ sort.IntSlice
142
+ k int
143
+ }
144
+
145
+ func Constructor (k int , nums []int ) KthLargest {
146
+ kl := KthLargest{k: k}
147
+ for _ , val := range nums {
148
+ kl.Add (val)
149
+ }
150
+ return kl
151
+ }
152
+
153
+ func (kl *KthLargest ) Add (val int ) int {
154
+ heap.Push (kl, val)
155
+ if kl.Len () > kl.k {
156
+ heap.Pop (kl)
157
+ }
158
+ return kl.IntSlice [0 ]
159
+ }
160
+
161
+ func (kl *KthLargest ) Push (v interface {}) {
162
+ kl.IntSlice = append (kl.IntSlice , v.(int ))
163
+ }
164
+
165
+ func (kl *KthLargest ) Pop () interface {} {
166
+ a := kl.IntSlice
167
+ v := a[len (a)-1 ]
168
+ kl.IntSlice = a[:len (a)-1 ]
169
+ return v
170
+ }
171
+
172
+ func KthLargestStream (k int , nums []int , elem []int ) []int {
173
+ obj := Constructor (k, nums)
174
+ result := []int {0 }
175
+ for _ , val := range elem {
176
+ obj.Add (val)
177
+ result = append (result, obj.IntSlice [0 ])
178
+ }
179
+
180
+ return result
181
+ }
127
182
```
128
183
129
184
## Benchmark
Original file line number Diff line number Diff line change
1
+ package kthlargestelementinastream
1
2
2
- // 時間複雜 O(), 空間複雜 O()
3
+ import (
4
+ "container/heap"
5
+ "sort"
6
+ )
7
+
8
+ /**
9
+ * Your KthLargest object will be instantiated and called as such:
10
+ * obj := Constructor(k, nums);
11
+ * param_1 := obj.Add(val);
12
+ */
13
+
14
+ // 時間複雜 O(), 空間複雜 O()
15
+ type KthLargest struct {
16
+ sort.IntSlice
17
+ k int
18
+ }
19
+
20
+ func Constructor (k int , nums []int ) KthLargest {
21
+ kl := KthLargest {k : k }
22
+ for _ , val := range nums {
23
+ kl .Add (val )
24
+ }
25
+ return kl
26
+ }
27
+
28
+ func (kl * KthLargest ) Add (val int ) int {
29
+ heap .Push (kl , val )
30
+ if kl .Len () > kl .k {
31
+ heap .Pop (kl )
32
+ }
33
+ return kl .IntSlice [0 ]
34
+ }
35
+
36
+ func (kl * KthLargest ) Push (v interface {}) {
37
+ kl .IntSlice = append (kl .IntSlice , v .(int ))
38
+ }
39
+
40
+ func (kl * KthLargest ) Pop () interface {} {
41
+ // 拿出最後一筆
42
+ a := kl .IntSlice
43
+ v := a [len (a )- 1 ]
44
+ kl .IntSlice = a [:len (a )- 1 ]
45
+ return v
46
+ }
47
+
48
+ func KthLargestStream (k int , nums []int , elem []int ) []int {
49
+ obj := Constructor (k , nums )
50
+ result := []int {0 }
51
+ for _ , val := range elem {
52
+ obj .Add (val )
53
+ result = append (result , obj .IntSlice [0 ])
54
+ }
55
+
56
+ return result
57
+ }
Original file line number Diff line number Diff line change 1
- package
1
+ package kthlargestelementinastream
2
2
3
- import "testing"
3
+ import (
4
+ "reflect"
5
+ "testing"
6
+ )
4
7
5
8
var tests = []struct {
6
- arg1 string
7
- want int
9
+ arg1 int
10
+ arg2 []int
11
+ arg3 []int
12
+ want []int
8
13
}{
9
14
{
10
- "bbbab" ,
11
- 4 ,
15
+ 3 ,
16
+ []int {4 , 5 , 8 , 2 },
17
+ []int {3 , 5 , 10 , 9 , 4 },
18
+ []int {0 , 4 , 5 , 5 , 8 , 8 },
12
19
},
13
20
}
14
21
15
- func TestLongestPalindromeSubseq (t * testing.T ) {
22
+ func TestKthLargestStream (t * testing.T ) {
16
23
for _ , tt := range tests {
17
- // if got := ReverseList (tt.arg1); !reflect.DeepEqual(got, tt.want) {
18
- if got := LongestPalindromeSubseq (tt .arg1 ); got != tt .want {
24
+ if got := KthLargestStream (tt .arg1 , tt . arg2 , tt . arg3 ); ! reflect .DeepEqual (got , tt .want ) {
25
+ // if got := KthLargestStream (tt.arg1, tt.arg2, tt.arg3 ); got != tt.want {
19
26
t .Errorf ("got = %v, want = %v" , got , tt .want )
20
27
}
21
28
}
22
29
}
23
30
24
- func BenchmarkLongestPalindromeSubseq (b * testing.B ) {
31
+ func BenchmarkKthLargestStream (b * testing.B ) {
25
32
b .ResetTimer ()
26
33
for i := 0 ; i < b .N ; i ++ {
27
- LongestPalindromeSubseq (tests [0 ].arg1 )
34
+ KthLargestStream (tests [0 ].arg1 , tests [ 0 ]. arg2 , tests [ 0 ]. arg3 )
28
35
}
29
36
}
30
37
You can’t perform that action at this time.
0 commit comments