Skip to content

Commit 0d59f15

Browse files
committed
docs: 0703. Kth Largest Element in a Stream
1 parent 0b89e82 commit 0d59f15

File tree

3 files changed

+130
-13
lines changed

3 files changed

+130
-13
lines changed

Leetcode/0703.Kth-Largest-Element-in-a-Stream/README.md

+56-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,62 @@ Acceptance Rate
123123
https://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 numberDiff line numberDiff line change
@@ -1,2 +1,57 @@
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+
}

Leetcode/0703.Kth-Largest-Element-in-a-Stream/main_test.go

+18-11
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,37 @@
1-
package
1+
package kthlargestelementinastream
22

3-
import "testing"
3+
import (
4+
"reflect"
5+
"testing"
6+
)
47

58
var 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

0 commit comments

Comments
 (0)