NC105 #二分查找-II#

二分查找-II

http://www.nowcoder.com/practice/4f470d1d3b734f8aaf2afb014185b395

二分搜索模板,然后下标前移。
注意:写成left + (right - left) / 2而不是(left + right) / 2可以避免溢出。

class Solution {
public:
    int binary_search(vector<int>& nums, int target)
    {
        int len = nums.size();
        int left = 0, right = len - 1;
        while(left <= right)
        {
            int middle = left + (right - left) / 2;
            if(nums[middle] == target) 
                return middle;
            else if(nums[middle] < target) 
                left = middle + 1;
            else 
                right = middle - 1;
        }
        return -1;
    }
    int search(vector<int>& nums, int target) {
        int index = binary_search(nums, target);
        if(index == -1) return -1;
        else
        {
            while(index - 1 >= 0 && nums[index - 1] == nums[index])
                index--;
            return index;
        }
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 18:13
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-27 20:55
点赞 评论 收藏
分享
06-20 21:22
已编辑
门头沟学院 Java
纯真的河老师在喝茶:答应了就跑啊,实习随便跑啊,别被pua了,md就是找个廉价劳动力,还平稳过度正式工,到时候跟你说没转正
点赞 评论 收藏
分享
白火同学:能。我当初应届沟通了1200,收简历50,面试10左右吧,加油投吧
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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