34.go 894 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package main
  2. // important
  3. func searchRange(nums []int, target int) []int {
  4. beg, end := 0, len(nums)-1
  5. res := []int{-1, -1}
  6. // search left
  7. for beg < end {
  8. mid := (beg + end) / 2
  9. if target > nums[mid] {
  10. beg = mid + 1
  11. } else {
  12. end = mid
  13. }
  14. }
  15. if end == -1 || nums[beg] != target {
  16. return res
  17. }
  18. res[0] = beg
  19. end = len(nums) - 1
  20. // search right
  21. for beg < end {
  22. mid := (beg+end)/2 + 1 // notice: if mid == i, will loop forever
  23. if target < nums[mid] {
  24. end = mid - 1
  25. } else {
  26. beg = mid
  27. }
  28. }
  29. res[1] = end
  30. return res
  31. }
  32. /* func main() {
  33. a1 := []int{1, 2, 3, 4, 4, 4, 5, 6, 7, 8, 9, 10}
  34. fmt.Println(searchRange(a1, 4))
  35. fmt.Println(searchRange(a1, 5))
  36. fmt.Println(searchRange(a1, 11))
  37. fmt.Println(searchRange(a1, 1))
  38. fmt.Println(searchRange(a1, 10))
  39. a2 := []int{5, 7, 7, 8, 8, 10}
  40. fmt.Println(searchRange(a2, 8))
  41. fmt.Println(searchRange([]int{}, 9))
  42. } */