【面试必刷TOP101】面试官:如何实现二分查找?

🍳作者: 贤蛋大眼萌,一名很普通但不想普通的程序媛 \color{#FF0000}{贤蛋 大眼萌 ,一名很普通但不想普通的程序媛} 贤蛋大眼萌,一名很普通但不想普通的程序媛🤳

🙊语录: 多一些不为什么的坚持 \color{#0000FF}{多一些不为什么的坚持} 多一些不为什么的坚持

📓 专栏:牛客刷题–斩获offer

💭 眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂 o f f e r ,程序员的必备刷题平台 − − 牛客网 \color{#ff7f50}{眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂offer,程序员的必备刷题平台--牛客网} 眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂offer,程序员的必备刷题平台牛客网

👉🏻开启刷题之旅

🧨 前言

🚀 牛客网 \color{#ff7f50}{牛客网} 牛客网 是一个集笔面试系统、题库、课程教育、社群交流、招聘内推于一体的招聘类网站,更是一个专注于程序员的学习和成长的平台。

image-20220917155316636

🪓自学是一个程序员必备的能力,而提高自己的编程能力最好方法就是通过刷题。一次偶然的机会让我发现牛客网这个新大陆,开启自己IT之旅。

这里有个大厂的面试真题,知己知彼百战百胜。

更有在线编程调试功能,提高编程效率。👉🏻开始学习

image-20221006215325826

🎁 二分查找-I

描述(题目简单) 考点:二分查找

请实现无重复数字的升序数组的二分查找

给定一个 元素升序的、无重复数字的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标(下标从 0 开始),否则返回 -1

数据范围:0 ≤len(nums)≤2×10^5 , 数组中任意值满足 |val| ≤10^9

进阶:时间复杂度 O(log n),空间复杂度 O(1)

image-20221006215032614

解题思路:

  • step 1:从数组首尾开始,每次取中点值。
  • step 2:如果中间值等于目标即找到了,可返回下标,如果中点值大于目标,说明中点以后的都大于目标,因此目标在中点左半区间,如果中点值小于目标,则相反。
  • step 3:根据比较进入对应的区间,直到区间左右端相遇,意味着没有找到。

GIF

题解:

//语言①: c
int search(int* nums, int numsLen, int target ) {
    if (numsLen <= 0)return -1;
    int low = 0, high = numsLen - 1;                    //初始化双指针
    int mid = (low + high) / 2;
    while (target != nums[mid] &&
            low <= high) {        //若当前mid值不为查找值,更新查找区域。
        if (target > nums[mid]) {
            low = mid + 1;
            mid = (low + high) / 2;
        } else {
            high = mid - 1;
            mid = (low + high) / 2;
        }
    }
    if (low > high)return -1;
    else return mid;
}
//语言②: JavaScript
function search(nums, target) {
  // write code here
  let len = nums.length;
  if (!len) return -1;
  let [left, right] = [0, len - 1];
  while (left <= right) {
    let mid = left + Math.floor((right - left) / 2);
    let num = nums[mid];
    if (num === target) return mid;
    else if (num > target) right = mid - 1;
    else left = mid + 1;
  }
  return -1;
}
module.exports = {
  search: search,
};

image-20221006215624188

🎉 总结

求知无坦途,学问无捷径。👣 一步一个脚印,你走过的路,每一步都算数。 \color{#ff7f50}{一步一个脚印,你走过的路,每一步都算数。} 一步一个脚印,你走过的路,每一步都算数。 每一次进步都是对自己努力的肯定。如果读了文章有收获,不如一起来学习,一起进步吧。传送门🚪刷题神器

在这里插入图片描述

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贤蛋大眼萌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值