Leetcode 刷题 704. 二分查找

很多前端的同学对数据结构和算法这块没有太多的概念,很多leetcode的题目看不懂,有时候可能看了题解也不知道是什么意思。下面根据题目来练习一下二分查找

704. 二分查找

题目

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1

题解

题目中给我们一个排序 数组和一个目标值,然后找到这个目标值,返回对应的位置,如果没有找到则返回-1。这个我们就可以利用二分查找 来解决那可就很简单了(不清楚二分的可以先去看看二分查找之万变不离其宗)。

示例1

我们先用图来演示下示例1 首先我们需要两个指针:一个左边指针(开始起点)left,也就是数组的第一个索引"0".一个右边指针(结束索引)right,也就是数组的最后一个索引nums.length - 1。同时我们还需要一个中间点mid.

可以发现,mid是处在索引为2的地方,这是为什么呢?因为leftright的索引的一半是2.5没有对应的索引,所以可以通过Math.floor解决这个问题。然后我们在通过mid对应的值和target的值进行对比。

  • 如果mid对应的值和target对应的值相等,说明找到了,则直接返回即可
  • 如果mid对应的值小于target对应的值,说明target的值在(mid, right]这个区间内,则将left直接移动到mid的下一位
  • 如果mid对应的值大于target对应的值,说明target的值在[left, mid)这个区间内,则将right直接移动到mid的上一位

比如我们的这个案例中,target是9,mid对应的是3,所以需要改变left的位置。我们通过图来看下完整的过程

mid对应的值是9,和target一样的时候,则直接返回。

那如果没有找到呢?我们来看下示例2

示例2

示例2中target变成了2.我们再来看下图

mid对应的值为3时,比target大,所以需要改变right的位置.right的位置确认后,我们就可以确认mid的位置,此时它和left的对应的值是一样的,比target小,所以需要改变left的位置。

根据同样的步骤走完之后,此时left,right,mid,在同一个位置,但是还是没有找到target的值,而且mid对应的值比target小,,所以需要改变left的位置。这样的话,left就大于right了,那就不可能找到了,则return -1

完整代码

js 复制代码
var search = function (nums, target) {
  let left = 0;
  let right = nums.length - 1;
  while (left <= right) {
    const mid = Math.floor(left + (right - left) / 2);
    if (nums[mid] === target) {
      return mid;
    } else if (nums[mid] > target) {
      right = mid - 1;
    } else if (nums[mid] < target) {
      left = mid + 1;
    }
  }
  return -1;
};

欢迎大家点赞评论,大家一起学习一起进步!!!

相关推荐
luj_17687 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
不听话坏8 小时前
Ignition篇(下 一) 动态执行前的事情
开发语言·前端·javascript
mCell8 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
likeyi078 小时前
require 和 import的区别
开发语言·前端
pany9 小时前
做 AI 友好的开源 Vue3 模板 🌈
前端·vue.js·ai编程
小二·9 小时前
React 19 + Next.js 15 现代前端开发实战:App Router / Server Components / 流式渲染
前端·javascript·react.js
KaMeidebaby9 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_176810 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
谙忆102410 小时前
前端图片直传对象存储:OSS/S3 预签名 URL、STS 临时凭证与回调校验
前端
tmlx3I08110 小时前
高光谱拼接算法(六)RANSAC 误匹配剔除
人工智能·算法·机器学习