mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 16:54:50 +08:00
添加 34. 在排序数组中查找元素的第一个和最后一个位置 Go版本
This commit is contained in:
@ -389,6 +389,54 @@ class Solution:
|
||||
### Go
|
||||
|
||||
```go
|
||||
func searchRange(nums []int, target int) []int {
|
||||
leftBorder := searchLeftBorder(nums, target)
|
||||
rightBorder := searchRightBorder(nums, target)
|
||||
|
||||
if leftBorder == -2 || rightBorder == -2 { // 情况一
|
||||
return []int{-1, -1}
|
||||
} else if rightBorder-leftBorder > 1 { // 情况三
|
||||
return []int{leftBorder + 1, rightBorder - 1}
|
||||
} else { // 情况二
|
||||
return []int{-1, -1}
|
||||
}
|
||||
}
|
||||
|
||||
func searchLeftBorder(nums []int, target int) int {
|
||||
left, right := 0, len(nums)-1
|
||||
leftBorder := -2 // 记录一下leftBorder没有被赋值的情况
|
||||
for left <= right {
|
||||
middle := (left + right) / 2
|
||||
if target == nums[middle] {
|
||||
right = middle - 1
|
||||
// 左边界leftBorder更新
|
||||
leftBorder = right
|
||||
} else if target > nums[middle] {
|
||||
left = middle + 1
|
||||
} else {
|
||||
right = middle - 1
|
||||
}
|
||||
}
|
||||
return leftBorder
|
||||
}
|
||||
|
||||
func searchRightBorder(nums []int, target int) int {
|
||||
left, right := 0, len(nums)-1
|
||||
rightBorder := -2 // 记录一下rightBorder没有被赋值的情况
|
||||
for left <= right {
|
||||
middle := (left + right) / 2
|
||||
if target == nums[middle] {
|
||||
left = middle + 1
|
||||
// 右边界rightBorder更新
|
||||
rightBorder = left
|
||||
} else if target > nums[middle] {
|
||||
left = middle + 1
|
||||
} else {
|
||||
right = middle - 1
|
||||
}
|
||||
}
|
||||
return rightBorder
|
||||
}
|
||||
```
|
||||
|
||||
### JavaScript
|
||||
|
Reference in New Issue
Block a user