美文网首页
二分查找三种模板

二分查找三种模板

作者: whelm | 来源:发表于2021-01-17 18:49 被阅读0次

leetcode 35 题

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。

示例 1:
输入: [1,3,5,6], 5
输出: 2
示例 2:
输入: [1,3,5,6], 2
输出: 1
示例 3:
输入: [1,3,5,6], 7
输出: 4

模板 1:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function(nums, target) {
   // 比较第一个和最后一个
   if(nums[0] > target) {
       return 0;
   }
   if(nums[nums.length - 1] < target) {
       return nums.length;
   }

   // 需要查找
   var left = 0;
   var right = nums.length;
   while(left < right) {
       var mid = Math.floor((left + right)/2);
       if(nums[mid] === target) {
           return mid;
       }
       if(nums[mid] > target) {
           // 向左查找
           right = mid - 1;
       } else {
           // 向右查找
           left = mid + 1;
       }
       // 最后一次查找情况:(left === right === mid) 
       // 如果不符合条件则会变为 left > right 循环中止
   }
   // 循环中止后考虑情况
    return left;
};

模板 2:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function(nums, target) {
   // 比较第一个和最后一个
   if(nums[0] > target) {
       return 0;
   }
   if(nums[nums.length - 1] < target) {
       return nums.length;
   }

   // 需要查找
   var left = 0;
   var right = nums.length;
   while(left < right) {
       var mid = Math.floor((left + right)/2);
       if(nums[mid] === target) {
           return mid;
       }
       if(nums[mid] > target) {
           // 向左查找
           right = mid;
       } else {
           // 向右查找
           left = mid + 1;
       }
       // 最终一次查找情况:(left < right 并相邻, mid === left) 
       // 如果不符合条件则会变为 left === right 循环中止
   }
   // 循环中止后考虑情况
    return left;
};

相关文章

  • 二分查找

    [TOC] 二分查找的基础模板 二分查找靠左的Index基础模板 二分查找靠右的Index基础模板 二分查找插入t...

  • Algorithm进阶计划 -- 二分搜索

    二分搜索二分搜索模板二分搜索运用 1. 二分搜索模板 二分搜索(二分查找)也称折半查找(Binary Search...

  • 二分查找模式

    二分查找通用的模板int mid = (left + right) / 2容易溢出 二分查找的通用模板 使用“左边...

  • 二分查找总结

    二分查找是在每次匹配后,将查找的空间一分为二的算法,二分查找应该是有序的数组进行查找. 二分查找模板 1. 模板一...

  • 查找算法

    三种查找算法:顺序查找,二分法查找(折半查找),分块查找,散列表

  • 二分查找三种模板

    leetcode 35 题 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组...

  • LeetCode 专题 :二分查找

    LeetCode 第 704 题是二分查找的模板问题。 LeetCode 第 704 题:二分查找 传送门:704...

  • LeetCode 数组专题 1:二分查找

    二分查找法 说明:二分查找法在代码实现上有模板方法,一定要掌握。 1、二分查找法的使用前提:数组一定要是排好序的,...

  • 消息传递-缓存-转发流程

    消息传递 缓存查找 哈希查找 三种查找方式缓存 -> 哈希算法查找当前类 -> 已排序 二分查找算法 未排序 ...

  • 二分查找模板

    标准二分查找的模板: 循环条件: left <= right中间位置计算: mid = left + ((righ...

网友评论

      本文标题:二分查找三种模板

      本文链接:https://www.haomeiwen.com/subject/wtfroktx.html