@@ -389,6 +389,54 @@ class Solution:
389
389
### Go
390
390
391
391
``` go
392
+ func 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
+ }
403
+ }
404
+
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
+ }
419
+ }
420
+ return leftBorder
421
+ }
422
+
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
+ }
437
+ }
438
+ return rightBorder
439
+ }
392
440
```
393
441
394
442
### JavaScript
0 commit comments