Leetcode: Search in Sorted Array

Example

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

相關文章
相關標籤/搜索