写点什么

LeetCode 二分查找使用 JavaScript 解题, 前端学算法

作者:董员外
  • 2022 年 9 月 03 日
    江苏
  • 本文字数:807 字

    阅读完需:约 3 分钟

LeetCode二分查找使用JavaScript解题,前端学算法

有人相爱,有人夜里开车看海,我是 LeetCode 第一题都做不出来


二分查找这个算是一道十分经典的题目了,记得无论是 C 语言还是 Java 以及数据结构,都会讲这个


当我在 LeetCode 再次做它的时候,感觉立马就来了:我要做十道

二分查找

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


输入: nums = [-1,0,3,5,9,12], target = 9

输出: 4

解释: 9 出现在 nums 中并且下标为 4

解题思路

从数组中间的元素开始比较,如果中间的元素正好等于目标值,则搜索结束;如果目标值大于或小于中间的元素,则在大于或小于中间的元素的那一半继续搜索,然后重复进行比较,直到最后找到他



  • 第一步: 定义查找的范围 [left,right],初始查找范围是整个数组。

  • 第二步:每次取查找范围的中点 mid,比较 nums[mid] 和 target 的大小,如果相等则 mid 即为要寻找的下标。

  • 第三步: 如果不相等则根据 nums[mid]和 target 的大小关系将查找范围缩小一半

  • 第四步:继续从第一步开始重复执行


var search = function(nums, target) {    // 在区间[left,right]中查找元素,左闭右闭    let left = 0;    let right = nums.length - 1;    while (left <= right) {      // 计算中间点      let mid = parseInt(left + (right-left)/2);      if (target == nums[mid]) {        return mid;        // 如果target < nums[mid],表示目标值可能在左半边      } else if (target < nums[mid]){        right = mid - 1;        // 如果target > nums[mid],表示目标值可能在右半边      } else if (target > nums[mid]){        left = mid + 1;      }    }    // 未找到返回-1    return -1;};
复制代码


知识点

  • parseInt(string, radix)解析一个字符串并返回指定基数的十进制整数,radix 是 2-36 之间的整数,表示被解析字符串的基数。

  • 当传入的radix 小于 2 或大于 36,会返回NaN

发布于: 刚刚阅读数: 4
用户头像

董员外

关注

距离成为百年老程序员还差98年 2021.03.04 加入

公众号:oldCode 分享面经,新技术,实战项目,一起来折腾吧

评论

发布
暂无评论
LeetCode二分查找使用JavaScript解题,前端学算法_JavaScript_董员外_InfoQ写作社区