For [4, 5, 1, 2, 3] and target=1, return 2.
For [4, 5, 1, 2, 3] and target=0, return -1.segmentfault
这一道题和上一题很相近,在一个rotated的array里寻找target。
此题的难点在于, 因为array是旋转过的, 咱们不知道target会落在哪里。仔细观察例子,能够发现,不管mid在哪里,start - mid 和mid - end这两个sub arrays, 总有一个是没有旋转过的正常的拍过序的。 有了这个信息, 咱们就能够知道target是在没有旋转过的那一边仍是在旋转过的那一边。这是此题的重要切入点,可以想到这里,这道题目就引刃而解了。数组
class Solution: """ @param: A: an integer rotated sorted array @param: target: an integer to be searched @return: an integer """ def search(self, nums, target): if nums is None or len(nums) == 0: return -1 start = 0 end = len(nums) - 1 while start + 1 < end: mid = start + (end - start) / 2 if nums[mid] == target: return mid elif nums[start] < nums[mid]: if nums[start] <= target < nums[mid]: end = mid else: start = mid elif nums[mid] < nums[end]: if nums[mid] < target <= nums[end]: start = mid else: end = mid if nums[start] == target: return start elif nums[end] == target: return end else: return -1
这道题目和 Find Minimum in Rotated Sorted Array 都是经过观察mid和start和end的关系来判断应该切掉哪一块的数组。仔细观察例子很是重要。code