1. 程式人生 > >leetcode 81. 搜尋旋轉排序陣列 II

leetcode 81. 搜尋旋轉排序陣列 II

假設按照升序排序的陣列在預先未知的某個點上進行了旋轉。

( 例如,陣列 [0,0,1,2,2,5,6] 可能變為 [2,5,6,0,0,1,2] )。

編寫一個函式來判斷給定的目標值是否存在於陣列中。若存在返回 true,否則返回 false

示例 1:

輸入: nums = [2,5,6,0,0,1,2], target = 0
輸出: true

示例 2:

輸入: nums = [2,5,6,0,0,1,2], target = 3
輸出: false

思路

和I一樣其實,變數在於會有複數個相同元素,會多一種情況,就是mid==end,此時只要去掉end這個重複元素,即可

code

class Solution {
public:
    bool search(vector<int>& nums, int target) {
        return search(nums,0,nums.size()-1,target);
    }
    bool search(vector<int>& nums,int start,int end,int target){
        if(start>end)
            return false;
        int mid=(start+end)/2;
        if(nums[mid]==target)
            return true;
        if(nums[mid]>nums[end]){
            if(nums[mid]>target && nums[start]<=target)
                end=mid-1;
            else start = mid+1;  //後半
        }
        else if(nums[mid]==nums[end]){
            end--;
        }
        else{
            if(nums[mid]<target && nums[end]>=target)
                start = mid+1;
            else end=mid-1;
        }
        return search(nums,start,end,target);
    }
};