添加新题目
This commit is contained in:
89
子串/最小覆盖子串/main.go
Normal file
89
子串/最小覆盖子串/main.go
Normal file
@@ -0,0 +1,89 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
fmt.Println(minWindow("baABabbb", "A"))
|
||||
}
|
||||
|
||||
func minWindow(s string, t string) string {
|
||||
return ""
|
||||
}
|
||||
|
||||
//func minWindow(s string, t string) string {
|
||||
// if len(s) < len(t) {
|
||||
// return ""
|
||||
// }
|
||||
// //fmt.Println("1")
|
||||
// minstr := ""
|
||||
// numstr := make([]int, 256)
|
||||
// num := 0
|
||||
// for _, ch := range t {
|
||||
//
|
||||
// //fmt.Println("ch:", ch, 'a')
|
||||
// numstr[ch]++
|
||||
// num++
|
||||
// }
|
||||
//
|
||||
// for i := 0; i < len(s); i++ {
|
||||
// //fmt.Println("1")
|
||||
// if int(s[i]) >= len(numstr) {
|
||||
// //fmt.Println("2")
|
||||
// continue
|
||||
// }
|
||||
// //fmt.Println("------当前i,", i)
|
||||
// //fmt.Println("numstr[s[i]]", numstr[s[i]])
|
||||
// if numstr[s[i]] > 0 {
|
||||
// tmpnum := num
|
||||
// tmpstr := make([]int, 256)
|
||||
// copy(tmpstr, numstr)
|
||||
// tmpstr[s[i]] -= 1
|
||||
// tmpnum--
|
||||
// p := i + 1
|
||||
// for p < len(s) {
|
||||
// if tmpnum == 0 {
|
||||
// //fmt.Println("退出循环")
|
||||
// break
|
||||
// }
|
||||
// //fmt.Println("当前p:", p, "指向:", string(s[p]))
|
||||
// //fmt.Println("tmpstr", tmpstr)
|
||||
// if int(s[p]) >= len(tmpstr) {
|
||||
// p++
|
||||
// //fmt.Println("跳过")
|
||||
// continue
|
||||
// }
|
||||
//
|
||||
// if tmpstr[s[p]] > 0 {
|
||||
// tmpstr[s[p]] -= 1
|
||||
// tmpnum--
|
||||
//
|
||||
// //fmt.Println("修改后的tmpstr", tmpstr)
|
||||
//
|
||||
// }
|
||||
// //fmt.Println("1")
|
||||
// p++
|
||||
// }
|
||||
// //fmt.Println("本次循环中tmpnum为:", tmpnum)
|
||||
// if tmpnum == 0 {
|
||||
// //fmt.Println("匹配到目标")
|
||||
// if len(minstr) == 0 {
|
||||
// minstr = s[i:p]
|
||||
// } else {
|
||||
// if (p - i) < len(minstr) {
|
||||
// minstr = s[i:p]
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// } else {
|
||||
// continue
|
||||
//
|
||||
// }
|
||||
//
|
||||
// } else {
|
||||
// continue
|
||||
// }
|
||||
// //fmt.Println("------退出第", i, "次循环,minstr为:", minstr)
|
||||
// }
|
||||
//
|
||||
// return minstr
|
||||
//}
|
||||
@@ -1,58 +1,51 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sort"
|
||||
)
|
||||
import "fmt"
|
||||
|
||||
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))
|
||||
fmt.Println(maxSlidingWindow([]int{7, 2, 4}, 2))
|
||||
}
|
||||
|
||||
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]
|
||||
if k > len(nums) {
|
||||
return []int(nil)
|
||||
}
|
||||
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])
|
||||
numlist := make([]int, 0, k)
|
||||
result := make([]int, 0)
|
||||
|
||||
//fmt.Println("result:", result)
|
||||
for i := 0; i < len(nums); i++ {
|
||||
if len(numlist) == 0 {
|
||||
numlist = append(numlist, i)
|
||||
if i >= k-1 {
|
||||
result = append(result, nums[numlist[0]])
|
||||
}
|
||||
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])
|
||||
if numlist[0] <= i-k {
|
||||
numlist = numlist[1:]
|
||||
}
|
||||
p := len(numlist) - 1
|
||||
//fmt.Println(numlist)
|
||||
for {
|
||||
if len(numlist) == 0 || p < 0 {
|
||||
break
|
||||
}
|
||||
if nums[numlist[p]] < nums[i] {
|
||||
p--
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
numlist = numlist[:p+1]
|
||||
if len(numlist) < k {
|
||||
numlist = append(numlist, i)
|
||||
} else {
|
||||
numlist = append(numlist[1:], i)
|
||||
}
|
||||
if i >= k-1 {
|
||||
result = append(result, nums[numlist[0]])
|
||||
}
|
||||
//
|
||||
|
||||
//fmt.Println("queueA2", queueA)
|
||||
//fmt.Println("queueA", queue)
|
||||
|
||||
fmt.Println("result:", result)
|
||||
}
|
||||
//fmt.Println("result", result)
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -144,6 +137,50 @@ func maxSlidingWindow(nums []int, k int) []int {
|
||||
// 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
|
||||
|
||||
Reference in New Issue
Block a user