File tree Expand file tree Collapse file tree 3 files changed +130
-13
lines changed
Leetcode/0703.Kth-Largest-Element-in-a-Stream Expand file tree Collapse file tree 3 files changed +130
-13
lines changed Original file line number Diff line number Diff line change @@ -123,7 +123,62 @@ Acceptance Rate
123123https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0703.Kth-Largest-Element-in-a-Stream/main.go
124124
125125``` 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+ }
127182```
128183
129184## Benchmark
Original file line number Diff line number Diff line change 1+ package kthlargestelementinastream
12
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
22
3- import "testing"
3+ import (
4+ "reflect"
5+ "testing"
6+ )
47
58var tests = []struct {
6- arg1 string
7- want int
9+ arg1 int
10+ arg2 []int
11+ arg3 []int
12+ want []int
813}{
914 {
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 },
1219 },
1320}
1421
15- func TestLongestPalindromeSubseq (t * testing.T ) {
22+ func TestKthLargestStream (t * testing.T ) {
1623 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 {
1926 t .Errorf ("got = %v, want = %v" , got , tt .want )
2027 }
2128 }
2229}
2330
24- func BenchmarkLongestPalindromeSubseq (b * testing.B ) {
31+ func BenchmarkKthLargestStream (b * testing.B ) {
2532 b .ResetTimer ()
2633 for i := 0 ; i < b .N ; i ++ {
27- LongestPalindromeSubseq (tests [0 ].arg1 )
34+ KthLargestStream (tests [0 ].arg1 , tests [ 0 ]. arg2 , tests [ 0 ]. arg3 )
2835 }
2936}
3037
You can’t perform that action at this time.
0 commit comments