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