题目: 给定一个有序数组的旋转和一个目标值,返回目标值在该数组的下标,如果不存在,则返回-1.假设该数组没有重复值.
代码实现:
使用二分查找
package main
import "fmt"
func Min(a, b int) int {
if a > b {
return b
}
return a
}
func searchRotatedArray(A []int, target int) int {
left, right, mid := 0, len(A) - 1, 0
for left <= right {
mid = left + (right - left) / 2
if A[mid] == target {
return mid
}
if A[left] == A[mid] && A[right] == A[mid] {
// 这种情况是无法确定是在哪一块序列中
left++
} else if A[left] <= A[mid] {
// 中间值在第一个序列中
if target >= A[left] && target < A[mid] { // 这个值落在中间值的左边
right = mid - 1
} else { // 这个值落在中间值的右边
left = mid + 1
}
} else {
// 中间值在第二个序列中
if target > A[mid] && target <= A[right] { // 这个值落在中间值的右边
left = mid + 1
} else {
right = mid + 1
}
}
}
return -1
}
func main() {
fmt.Println(searchRotatedArray([]int{3,4,5,6,8,1,2,3,3}, 1))
}