资讯专栏INFORMATION COLUMN

我的面试准备过程--查找算法(更新中)

Soarkey / 453人阅读

摘要:把准备过程纪录下来,共勉。线性查找二分查找二分查找英语,也称折半查找英语对数查找英语,是一种在有序数组中查找某一特定元素的搜索算法。

写在最前面

导师贪腐出逃美国,两年未归,可怜了我。拿了小米和美团的offer,要被延期,offer失效,工作重新找。把准备过程纪录下来,共勉。

线性查找
public static int search(int[] data, int target) {
    for(int i = 0; i < data.length; i++){
        if(data[i] == target){
            return i;
        }
    }
    return -1;
}
二分查找

二分查找(英语:binary search),也称折半查找(英语:half-interval search)、对数查找(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。 搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的 那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。 - from 维基百科

二分法首先考察中间元素a[mid],如果该值是我们要找的值,那好极了,直接找到了;如果不是的话,由于我们已经知道数组是排好序的(二分法要求待查找的数组是有序的,本例假设是升序的,降序其实是一样的),那就看目标值target和a[mid]的关系是怎样的:如果a[mid] > target则说明目标值target如果存在的话一定在a[mid]的左侧,因为左侧都比a[mid]小;如果a[mid] < target则说明目标值如果存在的话一定在a[mid]的右侧,因为右侧都比a[mid]大。

递归法

    public static int binarySearch1(int[] data, int low, int high, int target) {
        int mid = (low + high) / 2;
        if(low <= high){
            if(target < data[mid]){
                binarySearch1(data, low, mid - 1, target);
            }else if(target > data[mid]){
                binarySearch1(data, mid + 1, high, target);
            }else{
                return mid;
            }
        }
        return -1;
    }

迭代

    public static int binarySearch2(int[] data, int low, int high, int target){
        int mid = (low + high) / 2;
        while(low <= high){
            if(target < data[mid]){
                high = mid - 1;
            }else if(target > data[mid]){
                low = mid + 1;
            }else{
                return mid;
            }
        }
        return -1;
    }

本节参考 http://www.jianshu.com/p/b07c...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70151.html

相关文章

  • 贴一贴我的后端开发面试

    摘要:线程有几种状态生命周期是怎样的线程有五种状态创建就绪运行阻塞死亡。当线程获得到等待的资源资源或者引起阻塞的条件得到满足时调用或,会从阻塞状态进入就绪状态。使用,允许最多个线程同时访问资源。 转载请注明出处: 贴一贴我的后端开发面试题。 本文是面试回寝室后凭记忆罗列出来的问题,大概90%的问题都在这里面了,有几个问题的实在是想不起来了= =,有些问题自我感觉回答的不好,所以我是查了资料...

    Batkid 评论0 收藏0
  • Android-Java面试

    摘要:好不容易在月号这天中午点左右接到了来自阿里的面试电话。这里会不断收集和更新基础相关的面试题,目前已收集题。面试重难点的和的打包过程多线程机制机制系统启动过程,启动过程等等扫清面试障碍最新面试经验分享,此为第一篇,开篇。 2016 年末,腾讯,百度,华为,搜狗和滴滴面试题汇总 2016 年未,腾讯,百度,华为,搜狗和滴滴面试题汇总 各大公司 Java 后端开发面试题总结 各大公司 Jav...

    TalkingData 评论0 收藏0
  • 求职准备 - 收藏集 - 掘金

    摘要:一基础接口的意义百度规范扩展回调抽象类的意义想不想通过一线互联网公司面试文档整理为电子书掘金简介谷歌求职记我花了八个月准备谷歌面试掘金原文链接翻译者 【面试宝典】从对象深入分析 Java 中实例变量和类变量的区别 - 掘金原创文章,转载请务必保留原出处为:http://www.54tianzhisheng.cn/... , 欢迎访问我的站点,阅读更多有深度的文章。 实例变量 和 类变量...

    cuieney 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<