mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-25 03:11:41 +08:00
79 lines
2.0 KiB
Go
79 lines
2.0 KiB
Go
package leetcode
|
|
|
|
func searchRange(nums []int, target int) []int {
|
|
return []int{searchFirstEqualElement(nums, target), searchLastEqualElement(nums, target)}
|
|
|
|
}
|
|
|
|
// 二分查找第一个与 target 相等的元素,时间复杂度 O(logn)
|
|
func searchFirstEqualElement(nums []int, target int) int {
|
|
low, high := 0, len(nums)-1
|
|
for low <= high {
|
|
mid := low + ((high - low) >> 1)
|
|
if nums[mid] > target {
|
|
high = mid - 1
|
|
} else if nums[mid] < target {
|
|
low = mid + 1
|
|
} else {
|
|
if (mid == 0) || (nums[mid-1] != target) { // 找到第一个与 target 相等的元素
|
|
return mid
|
|
}
|
|
high = mid - 1
|
|
}
|
|
}
|
|
return -1
|
|
}
|
|
|
|
// 二分查找最后一个与 target 相等的元素,时间复杂度 O(logn)
|
|
func searchLastEqualElement(nums []int, target int) int {
|
|
low, high := 0, len(nums)-1
|
|
for low <= high {
|
|
mid := low + ((high - low) >> 1)
|
|
if nums[mid] > target {
|
|
high = mid - 1
|
|
} else if nums[mid] < target {
|
|
low = mid + 1
|
|
} else {
|
|
if (mid == len(nums)-1) || (nums[mid+1] != target) { // 找到最后一个与 target 相等的元素
|
|
return mid
|
|
}
|
|
low = mid + 1
|
|
}
|
|
}
|
|
return -1
|
|
}
|
|
|
|
// 二分查找第一个大于等于 target 的元素,时间复杂度 O(logn)
|
|
func searchFirstGreaterElement(nums []int, target int) int {
|
|
low, high := 0, len(nums)-1
|
|
for low <= high {
|
|
mid := low + ((high - low) >> 1)
|
|
if nums[mid] >= target {
|
|
if (mid == 0) || (nums[mid-1] < target) { // 找到第一个大于等于 target 的元素
|
|
return mid
|
|
}
|
|
high = mid - 1
|
|
} else {
|
|
low = mid + 1
|
|
}
|
|
}
|
|
return -1
|
|
}
|
|
|
|
// 二分查找最后一个小于等于 target 的元素,时间复杂度 O(logn)
|
|
func searchLastLessElement(nums []int, target int) int {
|
|
low, high := 0, len(nums)-1
|
|
for low <= high {
|
|
mid := low + ((high - low) >> 1)
|
|
if nums[mid] <= target {
|
|
if (mid == len(nums)-1) || (nums[mid+1] > target) { // 找到最后一个小于等于 target 的元素
|
|
return mid
|
|
}
|
|
low = mid + 1
|
|
} else {
|
|
high = mid - 1
|
|
}
|
|
}
|
|
return -1
|
|
}
|