要求:给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。

样例:在数组 [1, 2, 3, 3, 4, 5, 10] 中二分查找3,返回2。

思路:使用递归,每次都找到中间那个数进行判断,直到区间第一个数的下标等于最后一个数的下标。判断的时候,对中间的数进行判断,分为3种情况,一种是刚好等于我们要找的数,这时候不能够直接返回下标,因为我们不确定这个数的前面是否存在着同样的数,所以,要对这个数前面的数进行查找,找到就返回前面的,没找到就返回中间数的下标

,当中间数小于目标数时,查找后一半,当中间数大于目标数的时候,查找前面一半。递归直到区间只有一个数。

代码如下:

 

class Solution {    /**     * @param nums: The integer array.     * @param target: Target to find.     * @return: The first position of target. Position starts from 0.     */    public int binarySearch(int[] nums, int target) {        //write your code here        return search(nums,target,0,nums.length);    }    public int search(int []nums,int target,int first,int last){        if(first==last){            if(nums[first]==target)                return first;            else return -1;        }else{            int avg=(first+last)/2;            if(nums[avg]==target){                if(search(nums,target,first,avg)==-1)//查找前一半有没有相同的数                    return nums[avg];                else                    return search(nums,target,first,avg);            }            else if(nums[avg]>target)                return search(nums,target,first,avg);            else if(nums[avg]<target){                return search(nums,target,avg+1,last);            }            return -1;        }    }}

如果有所帮助,脸皮厚求个赞~

此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~

技术之路不在一时,山高水长,纵使缓慢,驰而不息。

公众号:秦怀杂货店

 

 

 

 

©著作权归作者所有:来自51CTO博客作者秦怀杂货店的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 键盘输入10 个数,输出最大值和最小值及其对应下标
  2. Intellij IDEA快捷键大全
  3. MAC中IntelliJ Idea常用快捷键
  4. 技术问答-20 ArrayList和LinkedList
  5. 【linux】循序渐进学运维-基础命令篇-查找类命令
  6. Longest Substring Without Repeating Characters 解决思路
  7. Dom元素增加删除,修改,查找
  8. 图 - 邻接表深度优先遍历(C语言)
  9. 图 -邻接表广度优先遍历(C语言)

随机推荐

  1. 前端开发:从哪里开始?
  2. 加载外部站点并更改其可视化
  3. 错误对象,本机和自定义,如何区分?
  4. 如何解决这个MongoDB / Node异步问题?
  5. react系列(一)JSX语法、组件概念、生命周期
  6. 如何创建一个npm命令,在控制台中执行两个
  7. Safari / Chrome中的全局控制台对象被重
  8. 用Javascript实现人脸美容
  9. Js的Url中传递中文参数乱码,如何获取Url中
  10. 超全超实用的Javascript类库和jQuery插件