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)) }