mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-05 16:36:41 +08:00
35 lines
697 B
Go
35 lines
697 B
Go
package leetcode
|
|
|
|
func search33(nums []int, target int) int {
|
|
if len(nums) == 0 {
|
|
return -1
|
|
}
|
|
low, high := 0, len(nums)-1
|
|
for low <= high {
|
|
mid := low + (high-low)>>1
|
|
if nums[mid] == target {
|
|
return mid
|
|
} else if nums[mid] > nums[low] { // 在数值大的一部分区间里
|
|
if nums[low] <= target && target < nums[mid] {
|
|
high = mid - 1
|
|
} else {
|
|
low = mid + 1
|
|
}
|
|
} else if nums[mid] < nums[high] { // 在数值小的一部分区间里
|
|
if nums[mid] < target && target <= nums[high] {
|
|
low = mid + 1
|
|
} else {
|
|
high = mid - 1
|
|
}
|
|
} else {
|
|
if nums[low] == nums[mid] {
|
|
low++
|
|
}
|
|
if nums[high] == nums[mid] {
|
|
high--
|
|
}
|
|
}
|
|
}
|
|
return -1
|
|
}
|