leetcode 81 搜索旋转排序数组 II

### 题目
假设按照升序排序的数组在预先未知的某个点上进行了旋转。

( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。

编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。

### 思路
不是完完全全的log n,在特殊情况下会退化成O(n),例如数组全部元素是一样的情况下。


### code
    

bool search(vector<int>& nums, int target) {
        if(nums.size()<1)
            return false;
        int l=0;
        int r=nums.size()-1;
        while(l<=r)
        {
            int mid=l+((r-l)>>1);
            if(target==nums[mid])
                return true;
            if(nums[mid]>nums[l])//left is 升序,按照数组的构造定义得出
            {
                if(target>=nums[l]&&target<=nums[mid])//如果目标值大于左值并且小于等于中间值,若存在则肯定在左边,否则在右边。
                    r=mid-1;
                else
                    l=mid+1;
            }
            else if(nums[mid] < nums[l])//右边升序
            {
                if( (target >= nums[mid]) && (target <= nums[r]))
                    l = mid+1;
                else
                    r = mid - 1;
            }
            else //此情况下退化成O(n);
                l=l+1;
        }
        return false;
    }

 

上一篇:【博客81】内存使用错误三:内存越界使用


下一篇:[NOIP模拟测试]:Drink(模拟)