167 lines
3.8 KiB
Go
167 lines
3.8 KiB
Go
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"sort"
|
||
)
|
||
|
||
func main() {
|
||
var a []int
|
||
a[0] = 1
|
||
fmt.Println(a[1])
|
||
//fmt.Println(maxSlidingWindow([]int{1, 3, -1, -3, 5, 3, 6, 7}, 3))
|
||
}
|
||
|
||
func maxSlidingWindow(nums []int, k int) []int {
|
||
queue := make([]int, k)
|
||
result := make([]int, 0)
|
||
for i := 0; i < k; i++ {
|
||
queue[i] = nums[i]
|
||
}
|
||
maxnum := 0
|
||
for i := 0; i < len(nums)-k+1; i++ {
|
||
if i == 0 {
|
||
queuetmp := make([]int, len(queue))
|
||
copy(queuetmp, queue) // 深拷贝
|
||
sort.Ints(queuetmp)
|
||
maxnum = queuetmp[k-1]
|
||
result = append(result, queuetmp[k-1])
|
||
|
||
//fmt.Println("result:", result)
|
||
continue
|
||
}
|
||
fmt.Println("queue分割前:", queue)
|
||
queueA := queue[1:]
|
||
//fmt.Println("queueA", queueA)
|
||
queueA = append(queueA, nums[i+k-1])
|
||
queue = queueA
|
||
fmt.Println("max", maxnum)
|
||
fmt.Println("当前右边界:", nums[i+k-1])
|
||
if nums[i+k-1] >= maxnum {
|
||
maxnum = nums[i+k-1]
|
||
result = append(result, nums[i+k-1])
|
||
} else {
|
||
queuetmp := make([]int, len(queue))
|
||
copy(queuetmp, queue) // 深拷贝
|
||
sort.Ints(queuetmp)
|
||
result = append(result, queuetmp[k-1])
|
||
}
|
||
//
|
||
|
||
//fmt.Println("queueA2", queueA)
|
||
//fmt.Println("queueA", queue)
|
||
|
||
fmt.Println("result:", result)
|
||
}
|
||
return result
|
||
}
|
||
|
||
//func maxSlidingWindow(nums []int, k int) []int {
|
||
// queue := make([]int, k)
|
||
// result := make([]int, 0)
|
||
// for i := 0; i < k; i++ {
|
||
// queue[i] = nums[i]
|
||
// }
|
||
// maxnum := 0
|
||
// for i := 0; i < len(nums)-k+1; i++ {
|
||
// if i == 0 {
|
||
// queuetmp := make([]int, len(queue))
|
||
// copy(queuetmp, queue) // 深拷贝
|
||
// sort.Ints(queuetmp)
|
||
// maxnum = queuetmp[k-1]
|
||
// result = append(result, queuetmp[k-1])
|
||
//
|
||
// //fmt.Println("result:", result)
|
||
// continue
|
||
// }
|
||
// fmt.Println("queue分割前:", queue)
|
||
// queueA := queue[1:]
|
||
// //fmt.Println("queueA", queueA)
|
||
// queueA = append(queueA, nums[i+k-1])
|
||
// queue = queueA
|
||
// fmt.Println("max", maxnum)
|
||
// fmt.Println("当前右边界:", nums[i+k-1])
|
||
// if nums[i+k-1] >= maxnum {
|
||
// maxnum = nums[i+k-1]
|
||
// result = append(result, nums[i+k-1])
|
||
// } else {
|
||
// queuetmp := make([]int, len(queue))
|
||
// copy(queuetmp, queue) // 深拷贝
|
||
// sort.Ints(queuetmp)
|
||
// result = append(result, queuetmp[k-1])
|
||
// }
|
||
// //
|
||
//
|
||
// //fmt.Println("queueA2", queueA)
|
||
// //fmt.Println("queueA", queue)
|
||
//
|
||
// fmt.Println("result:", result)
|
||
// }
|
||
// return result
|
||
//}
|
||
|
||
//func maxSlidingWindow(nums []int, k int) []int {
|
||
// queue := make([]int, k)
|
||
// result := make([]int, 0)
|
||
// for i := 0; i < k; i++ {
|
||
// queue[i] = nums[i]
|
||
// }
|
||
// maxnum := 0
|
||
// for i := 0; i < len(nums)-k+1; i++ {
|
||
// if i == 0 {
|
||
// queuetmp := make([]int, len(queue))
|
||
// copy(queuetmp, queue) // 深拷贝
|
||
// sort.Ints(queuetmp)
|
||
// maxnum = queuetmp[k-1]
|
||
// result = append(result, queuetmp[k-1])
|
||
//
|
||
// //fmt.Println("result:", result)
|
||
// continue
|
||
// }
|
||
// fmt.Println("queue分割前:", queue)
|
||
// queueA := queue[1:]
|
||
// //fmt.Println("queueA", queueA)
|
||
// queueA = append(queueA, nums[i+k-1])
|
||
// queue = queueA
|
||
// fmt.Println("max", maxnum)
|
||
// fmt.Println("当前右边界:", nums[i+k-1])
|
||
// if nums[i+k-1] >= maxnum {
|
||
// maxnum = nums[i+k-1]
|
||
// result = append(result, nums[i+k-1])
|
||
// } else {
|
||
// queuetmp := make([]int, len(queue))
|
||
// copy(queuetmp, queue) // 深拷贝
|
||
// sort.Ints(queuetmp)
|
||
// result = append(result, queuetmp[k-1])
|
||
// }
|
||
// //
|
||
//
|
||
// //fmt.Println("queueA2", queueA)
|
||
// //fmt.Println("queueA", queue)
|
||
//
|
||
// fmt.Println("result:", result)
|
||
// }
|
||
// return result
|
||
//}
|
||
|
||
//func maxSlidingWindow(nums []int, k int) []int {
|
||
// result := make([]int, 0)
|
||
// nowmax := 0
|
||
// for i := 0; i < len(nums)-k+1; i++ {
|
||
// if i == 0 {
|
||
// tmp := nums[:k]
|
||
// sort.Ints(tmp)
|
||
// result = append(result, tmp[k-1])
|
||
// nowmax = tmp[k-1]
|
||
// continue
|
||
// }
|
||
// if nums[i+k-1] > nowmax {
|
||
// result = append(result, nums[i+k-1])
|
||
// } else {
|
||
// result = append(result, nowmax)
|
||
// }
|
||
//
|
||
// }
|
||
// return result
|
||
//}
|