Search in Rotated Sorted Array I
每次二分,无论如何旋转的,总有半边的数字是有序的,而判断标准就是拿左右界和中间位置大小判断
判断完了之后再根据这个有序的半边去判断target即可
class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
n = len(nums)
start, end = 0, n - 1
while start <= end:
mid = start + (end - start) / 2
if nums[mid] == target:
return mid
if nums[start] <= nums[mid]:
if nums[start] <= target and target < nums[mid]:
end = mid - 1
else:
start = mid + 1
else:
if nums[mid] < target and target <= nums[end]:
start = mid + 1
else:
end = mid - 1
return -1
Java版本
class Solution {
public int search(int[] nums, int target) {
int start = 0;
int end = nums.length - 1;
while (start <= end) {
int mid = start + (end - start) / 2;
if (nums[mid] == target) {
return mid;
}
if (nums[start] <= nums[mid]) {
if (nums[start] <= target && target <= nums[mid]) {
end = mid - 1;
} else {
start = mid + 1;
}
} else {
if (nums[mid] <= target && target <= nums[end]) {
start = mid + 1;
} else {
end = mid - 1;
}
}
}
return -1;
}
}