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

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

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

先找到翻转的起始下标,通过判断nums[0]target的相对大小来决定在哪一段上进行常规二分。

class Solution {
public:
    int binary_s(vector<int> nums, int target, int left, int right)
    {
        while(left <= right)
        {
            int middle = left + (right - left) / 2;
            if(nums[middle] == target) return middle;
            else if(nums[middle] < target) left = middle + 1;
            else if(nums[middle] > target) right = middle - 1;
        }
        return -1;
    }

    int search(vector<int>& nums, int target) {
        int move = 0, len = nums.size();
        for(int i = 0; i < len - 1; i++)
            if(nums[i] > nums[i + 1])
                move = i + 1;
        if(move == 0) return binary_s(nums, target, 0, len - 1);
        if(nums[0] > target) return binary_s(nums, target, move, len - 1);
        else return binary_s(nums, target, 0, move - 1);
    }
};
全部评论

相关推荐

08-19 18:59
已编辑
绍兴文理学院 Java
一只末影酱:一、1w+qps嘛感觉数据有点太夸张了 二、还有就是99.95%这些,本身大部分学生做的小项目基本是100%,因为量太小了,网络抖动问题也基本模拟不出来,感觉这些不太好写 三、你这些项目,都是一个月就做完了,更抽象了,也就是大概意味着,没有技术调研,没有上线测试,
点赞 评论 收藏
分享
头像
08-28 09:05
门头沟学院
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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