@@ -390,52 +390,49 @@ class Solution:
390390
391391``` go
392392func searchRange (nums []int , target int ) []int {
393- leftBorder := searchLeftBorder (nums, target)
394- rightBorder := searchRightBorder (nums, target)
395-
396- if leftBorder == -2 || rightBorder == -2 { // 情况一
397- return []int {-1 , -1 }
398- } else if rightBorder-leftBorder > 1 { // 情况三
399- return []int {leftBorder + 1 , rightBorder - 1 }
400- } else { // 情况二
401- return []int {-1 , -1 }
402- }
393+ leftBorder := getLeft (nums, target)
394+ rightBorder := getRight (nums, target)
395+ // 情况一
396+ if leftBorder == -2 || rightBorder == -2 {
397+ return []int {-1 , -1 }
398+ }
399+ // 情况三
400+ if rightBorder - leftBorder > 1 {
401+ return []int {leftBorder + 1 , rightBorder - 1 }
402+ }
403+ // 情况二
404+ return []int {-1 , -1 }
403405}
404406
405- func searchLeftBorder (nums []int , target int ) int {
406- left , right := 0 , len (nums)-1
407- leftBorder := -2 // 记录一下leftBorder没有被赋值的情况
408- for left <= right {
409- middle := (left + right) / 2
410- if target == nums[middle] {
411- right = middle - 1
412- // 左边界leftBorder更新
413- leftBorder = right
414- } else if target > nums[middle] {
415- left = middle + 1
416- } else {
417- right = middle - 1
418- }
407+ func getLeft (nums []int , target int ) int {
408+ left , right := 0 , len (nums)-1
409+ border := -2 // 记录border没有被赋值的情况;这里不能赋值-1,target = num[0]时,会无法区分情况一和情况二
410+ for left <= right { // []闭区间
411+ mid := left + ((right - left) >> 1 )
412+ if nums[mid] >= target { // 找到第一个等于target的位置
413+ right = mid - 1
414+ border = right
415+ } else {
416+ left = mid + 1
419417 }
420- return leftBorder
418+ }
419+ return border
421420}
422421
423- func searchRightBorder (nums []int , target int ) int {
424- left , right := 0 , len (nums)-1
425- rightBorder := -2 // 记录一下rightBorder没有被赋值的情况
426- for left <= right {
427- middle := (left + right) / 2
428- if target == nums[middle] {
429- left = middle + 1
430- // 右边界rightBorder更新
431- rightBorder = left
432- } else if target > nums[middle] {
433- left = middle + 1
434- } else {
435- right = middle - 1
436- }
422+ func getRight (nums []int , target int ) int {
423+ left , right := 0 , len (nums) - 1
424+ border := -2
425+ for left <= right {
426+ mid := left + ((right - left) >> 1 )
427+ if nums[mid] > target {
428+ right = mid - 1
429+ } else { // 找到第一个大于target的位置
430+ left = mid + 1
431+ border = left
437432 }
438- return rightBorder
433+ }
434+ return border
435+
439436}
440437```
441438
0 commit comments