您的位置:首页 > 编程语言 > Python开发

33. Search in Rotated Sorted Array leetcode python 2016 new season

2016-01-19 12:46 543 查看
Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 
0 1 2 4 5 6 7
 might become 
4
5 6 7 0 1 2
).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

1. find the pivot

2. do binary search in each part

if it is on the right side the index needs to be right_result + pivot

class Solution(object):
def findPivot(self, nums):
low = 0
high = len(nums) - 1
while low < high and nums[low] > nums[high]:
mid = low + (high - low) / 2
if nums[mid] < nums[high]:
high = mid
else:
low += 1
return low
def binSearch(self, nums, target):
low = 0
high = len(nums) - 1
while True:
if low > high:
return -1
mid = low + (high - low) / 2
if target < nums[mid]:
high = mid - 1
elif target > nums[mid]:
low = mid + 1
else:
return mid

def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if len(nums) == 1 and nums[0] != target:
return -1
elif len(nums) == 1 and nums[0] == target:
return 0
pivot = self.findPivot(nums)
left_result = self.binSearch(nums[:pivot], target)
right_result = self.binSearch(nums[pivot:], target)
if right_result != -1:
right_result += pivot
return max(left_result, right_result)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: