二分查找

211 阅读1分钟

“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”

一、题目描述

  • 所谓二分查找就是给定你一个数组,让你用二分查找方式找到这个数,这道题依然是面试的高频考题,小伙伴你们会嘛!

二、思路分析

  • 首先你要将数组进行排序(也就是必须是有序的数组才可以进行二分查找),这里可以用我上一篇文章写的快速排序来实现。
    • 折半数组,如果中间的数,比我们要查找的数,则在左侧的折半数组中继续折半查找
    • 如果中间的数,比我们要查找的数,则在右侧的折半数组中继续折半查找。
    • 如果相等找到我们要找的数
  • 否则查找失败返回-1

三、AC 代码:

//查找的是第几个数加一,下标的话不加。
public static int binarySearch(int []nums,int key) {
    int max = nums.length - 1;
    int min = 0;
    int mid = (max + min) / 2;


    while (min <= max) {
        if (nums[mid] > key) {
            //想找的数在左边
            max = mid - 1;
        } else if (nums[mid] < key) {
            min = mid + 1;
        } else if (nums[mid] == key) {
            key = mid + 1;
        }
    }

    if (min > max) {
        return -1;
    } else {
        return key;
    }
}

四、总结:

  • 好了,代码撸完,我们总结一下
    • 关键点,首先要保证数组是有序的
    • 细节,要注意最大值和最小值的判断是小于等于
    • 注意要求返回的是下标还是第几个数

最后这个算法是面试常考的哦,希望小伙伴们都能掌握这道题,顺利拿到心仪的Offer,明天见!