AcWing 789. 数的范围
重点在于两个二分方法的使用一个需要补偿1,另一个不需要
主要在于向左递归 和向右递归
package main
import "fmt"
func main() {
var n, m int
fmt.Scan(&n, &m)
q := make([]int, n)
for i := 0; i < n; i++ {
fmt.Scan(&q[i])
}
for ; m > 0; m-- {
var x int
fmt.Scanf("%d", &x)
// 二分起始坐标
l, r := 0, n-1
for l < r {
mid := (l + r) / 2
if q[mid] >= x {
r = mid
} else {
l = mid + 1
}
}
if q[l] != x {
fmt.Println("-1 -1")
} else {
fmt.Print(l, " ")
l, r = 0, n-1
for l < r {
mid := (l + r + 1) / 2
if q[mid] <= x {
l = mid
} else {
r = mid - 1
}
}
fmt.Println(l)
}
}
}

浙公网安备 33010602011771号