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

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

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;
    }
全部评论

相关推荐

uu们,拒offer时hr很生气怎么办我哭死
爱睡觉的冰箱哥:人家回收你的offer,或者oc后没给你发offer的时候可不会愧疚你,所以你拒了也没必要愧疚他。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
墨西哥大灰狼:如果你的校友卤馆还在的话,他肯定会给你建议的,可是卤馆注销了@ 程序员卤馆
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务