Search in Rotated Sorted Array
class Solution {
public int search(int[] nums, int target) {
if(nums.length == 0) return -1;
int l = 0;
int r = nums.length - 1;
while((l+1) < r){
int mid = (l+ r) / 2;
if(nums[mid] > nums[l]) {
if(nums[mid] > target && nums[l] <= target){
r = mid;
} else {
l = mid;
}
} else {
if(nums[mid] < target && nums[r] >= target){
l = mid;
} else {
r = mid;
}
}
}
if(nums[l] == target) return l;
if(nums[r] == target) return r;
return -1;
}
}class Solution:
# @param {integer[]} nums
# @param {integer} target
# @return {integer}
def search(self, nums, target):
if not nums:
return -1
return self.binarySearch(nums, target, 0, len(nums)-1)
def binarySearch(self, nums, target, start, end):
if end < start:
return -1
mid = (start+end)/2
if nums[mid] == target:
return mid
if nums[start] <= target < nums[mid]: # left side is sorted and has target
return self.binarySearch(nums, target, start, mid-1)
elif nums[mid] < target <= nums[end]: # right side is sorted and has target
return self.binarySearch(nums, target, mid+1, end)
elif nums[mid] > nums[end]: # right side is pivoted
return self.binarySearch(nums, target, mid+1, end)
else: # left side is pivoted
return self.binarySearch(nums, target, start, mid-1)
最后更新于
这有帮助吗?