Files
leetcode/top-100-liked/65/leetcode_test.go
T
2026-07-15 20:46:11 +08:00

59 lines
1.1 KiB
Go

package top100liked
import (
"fmt"
"testing"
)
// https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/?envType=study-plan-v2&envId=top-100-liked
func binarySearch(nums []int, target int) int {
start := 0
end := len(nums) - 1
for start <= end {
midIdx := start + (end-start)/2
mid := nums[midIdx]
if mid == target {
return midIdx
} else if mid > target {
end = midIdx - 1
} else if mid < target {
start = midIdx + 1
}
}
return -1
}
func searchRange(nums []int, target int) []int {
res := binarySearch(nums, target)
if res == -1 {
return []int{-1, -1}
}
l, r := res-1, res+1
for l >= 0 {
_l := binarySearch(nums[:l+1], target)
if _l == -1 {
break
} else {
l = _l - 1
}
}
for r < len(nums) {
_r := binarySearch(nums[r:], target)
if _r == -1 {
break
} else {
r = r + _r + 1
}
}
return []int{l + 1, r - 1}
}
func Test(t *testing.T) {
nums := []int{5, 7, 7, 8, 8, 10}
fmt.Printf("%+v\n", searchRange(nums, 8))
fmt.Printf("%+v\n", searchRange(nums, 6))
fmt.Printf("%+v\n", searchRange([]int{}, 0))
}