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

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

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) {
        // write code here
        /*
        0  1  2   3  4  5  6
        6  8  10  0  2  4  5

        要不是mid的左边有序的,要不是mid的右边有序的
        */

        int find_result = 0;
        int low = 0, high = nums.size()-1, mid=0;
        while(low<=high)
        {
            mid = (low+high)/2;
            if(nums[mid]==target)
            {
                find_result = 1;
                break;
            }
            else
            {
                //右边有序,小于等于,可能只有1个元素
                if(nums[mid]<=nums[high])
                {
                    if(target>nums[mid]&&target<=nums[high])
                    {
                        low = mid + 1;
                    }
                    else
                    {
                        high = mid -1;
                    }
                }
                else if(nums[low]<nums[mid])//左边有序
                {
                    if(nums[low]<=target&&target<nums[mid])
                    {
                        high = mid - 1;
                    }
                    else
                    {
                        low = mid + 1;
                    }
                }
            }

        }


        if(find_result==0)
            mid = -1;
        return mid;
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务