239. 滑动窗口最大值
func maxSlidingWindow(nums []int, k int) []int {
que := &Queue{}
result := []int{}
for i := 0; i < k && i < len(nums); i++ {
que.push(nums[i])
}
result = append(result, que.front())
for i := k; i < len(nums); i++ {
v := nums[i - k]
que.pop(v)
que.push(nums[i])
result = append(result, que.front())
}
return result
}
type Queue struct {
data []int
length int
}
func (q *Queue) push(v int) {
for !q.empty() && v > q.back() {
q.pop_back()
}
q.push_back(v)
}
func (q *Queue) push_back(v int) {
q.data = append(q.data, v)
q.length++
}
func (q *Queue) back() (v int) {
return q.data[q.length - 1]
}
func (q *Queue) pop(v int) {
if v == q.front() {
q.pop_front()
}
}
func (q *Queue) front() (v int) {
return q.data[0]
}
func (q *Queue) pop_front() {
q.data = q.data[1:]
q.length--
}
func (q *Queue) pop_back() {
q.data = q.data[:q.length - 1]
q.length--
}
func (q *Queue) empty() bool {
return q.length <= 0
}
- 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
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
8.前 K 个⾼频元素