天天看點

Leetcode 81: Search in Rotated Sorted Array II

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., [0,0,1,2,2,5,6] might become [2,5,6,0,0,1,2]).

You are given a target value to search. If found in the array return true, otherwise return false.

Example 1:

Input: nums = [2,5,6,0,0,1,2], target = 0

Output: true

Example 2:

Input: nums = [2,5,6,0,0,1,2], target = 3

Output: false

C++
bool search(vector<int>& nums, int target) {
        int n = nums.size() -1 ;
        int left = 0;
        int right = n;
        while(left <= right)
        {
            int mid = (left + right)/2;
            if(nums[mid] == target)return true;
            if(nums[mid] > nums[right])
            {
                if(nums[left] <= target&&nums[mid] > target)right = mid - 1;
                else
                    left = mid + 1;
            }
            else if(nums[mid] < nums[right])
            {
                if(nums[right] >= target&&nums[mid] < target)left = mid + 1;
                else
                    right = mid - 1;
            }
            else
                right--;
        }
        return false;
    }