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

相关推荐

在debug的柠檬精...:好消息:现在HR挑三拣四 15年后 HR跪着求要简历 坏消息:被挑的是这代人,到时候求人的也是这代人。真好。
点赞 评论 收藏
分享
牛客92804383...:在他心里你已经是他的员工了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-27 18:00
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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