题解 | #在旋转过的有序数组中寻找目标值#

在旋转过的有序数组中寻找目标值

https://www.nowcoder.com/practice/87c0e7abcbda41e7963660fa7d020995

    int search(vector<int>& nums, int target) {
        // write code here
        int left=0,right=nums.size()-1;
        while(left<=right){
            int mid=(left+right)/2;
            if(nums[mid]==target)
                return mid;
            if(nums[mid]<target){
                if(nums[left]<nums[right])
                    left=mid+1; //left-right正序,二分查找
                else{
                    if(nums[left]<nums[mid]) //left-mid正序,直接排除
                        left=mid+1;
                    else                    //left-mid不正序,那么mid-right肯定正序,要么在left-k(k<mid),要么在mid-right
                    {
                        if(nums[left]<=target) //肯定在left-k之间
                            right=mid-1;
                        else                //肯定在mid+1-right之间
                            left=mid+1;
                    }
                }
            }
            else{        //nums[mid]>target
                if(nums[left]<nums[right])
                    right=mid-1; //left-right正序,二分查找
                else{
                    if(nums[left]<nums[mid]) { //left-mid正序,可能在left-mid,可能在 k-right(k>mid)
                        if(nums[left]<=target) //肯定在left-mid里面
                            right=mid-1;
                        else                    //肯定在k-right里面
                            left=mid+1;
                    } 
                    else            //left-mid不正序,那么mid-right肯定正序,直接排除
                        right=mid-1;
                }
                
            }
        }
        return -1;
    }
全部评论

相关推荐

在评审的大师兄很完美:像这种一般就是部门不匹配 转移至其他部门然后挂掉 我就是这样被挂了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务