题解 | #二分查找-II#

二分查找-II

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

描述

请实现有重复数字的升序数组的二分查找
给定一个 元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1

示例1

输入:
[1,2,4,4,5],4

返回值:
2

说明:
从左到右,查找到第1个为4的,下标为2,返回2

示例2

输入:
[1,2,4,4,5],3
复制
返回值:
-1

示例3

输入:
[1,1,1,1,1],1

返回值:
0

解题:

按照一般的思路,确定一个区间然后再根据整个数组的中间值去改变区间起始位置,然后在最小区间获得目标值的下标

int index=-1;
        int length=nums.length;
        int min=length/2;
        int end=length-1;
        int start=0;

        while ((end-start)>2){

            if(target<=nums[min]){
                end=min;
                min=min/2;
            }
            if(target>nums[min]){
                start=min;
                min=((end-min+1)/2)+min;
            }
        }

        for (int i = start; i <=end; i++) {
            if(target==nums[i]){
                return i;
            }
        }
        return index;
全部评论

相关推荐

一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务