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

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

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

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @param target int整型 
     * @return int整型
     */
    int search(vector<int>& nums, int target) {
        int n = nums.size();
        int left = 0, right = n-1;
        while(left <= right){
            int mid = left + (right-left)/2;
            if(nums[mid]==target)   return mid;
            // 旋转数组关键在于找到有序的部分,并检查target是否在这有序的部分里面,如果在可以利用二分查找,否则就在另外无序的一部分中查找
            // 此时,mid左侧是有序的
            if(nums[mid]>nums[n-1]){
                if(target < nums[mid] && target >= nums[left]){
                    right = mid-1;
                }else{
                    left = mid +1;
                }
            }else{  // 此时,mid右侧是有序的
                if(target > nums[mid] && target <= nums[right]){
                    left = mid +1;
                }else {
                    right = mid -1;
                }
            }
        }
        return -1;
    }
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
10-15 14:22
点赞 评论 收藏
分享
美丽的查理斯不讲武德:包kpi的啊,感觉虾皮一点hc都没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务