美文网首页
二分搜索

二分搜索

作者: bowen_wu | 来源:发表于2022-08-16 19:06 被阅读0次

概述

  • 将目标值与数组的中间元素进行比较
  • 如果数组为空,则代表找不到
  • 每一次比较都使搜索范围缩小一半
  • 排序数组中搜索的最快方法

模板

public class BinarySearch {
    public int binarySearch(int target, int[] nums) {
        if (nums == null || nums.length == 0) {
            return -1;
        }

        int start = 0;
        int end = nums.length - 1;

        while (start + 1 < end) { // 相邻即退出
            int mid = start + (end - start) / 2; // 可以防止两个整型值相加时溢出
            if (target > nums[mid]) { // 如果数组中有多个 target,此时找到的是最左侧的,即相等时移动的是 end。如果要找最右侧的,那么相等时移动 start 即可
                start = mid;
            } else {
                end = mid;
            }
        }

        if (nums[start] == target) {
            return start;
        }
        if (nums[end] == target) {
            return end;
        }
        return -1;
    }
}
const binarySearch = (nums, target) => {
  if (nums == null || nums.length == 0) {
    return -1;
  }

  let start = 0;
  let end = nums.length - 1;
  while (start + 1 < end) {
    let mid = Math.floor((start + end) / 2);
    if (target > nums[mid]) {
      start = mid;
    } else {
      end = mid;
    }
  }

  if (nums[start] == target) {
    return start;
  }
  if (nums[end] == target) {
    return end;
  }
  return -1;
}

模板变化

  • 查找第一个 => 左边界 => end = mid
  • 查找最后一个 => 右边界 => start = mid
  • 找区间 => 两次找即可

时间复杂度

  • T(n) = T(n/2) + m
  • 主定理 => a = 1, b = 2, c = 0
  • logba = 0 == c
  • T(n) = O(nclogn) = O(logn)

数组区间有序地二分问题

  • 数组不是完全有序,但仍能找到部分有序的空间
  • 根据判断,去掉没有解的一半 => 通过比较关键点大小知道哪一半可以不要
  • 比较 nums[start], nums[mid] 和 nums[end] 的大小去丢弃,查看目标值是在 (start, mid) 还是在 (mid, end) 区间

知识点

  1. 一维坐标 index 和二维矩阵坐标(x, y)相互转换
    • x = index / (列数)
    • y = index % (列数)
    • index = x * n + y

相关文章

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

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

  • 算法-二分搜索算法

    算法:二分搜索算法(折半查找算法)时间复杂度: 二分搜索算法概述 二分搜索算法伪代码 二分搜索算法实现 二分搜索算...

  • 搜索算法

    顺序搜索 二分搜索

  • 二分搜索(Binary_Search)

    1. 二分搜索是什么? 二分搜索(英语:binary search),也叫折半搜索(英语:half-interva...

  • AVL 树

    一:什么是 AVL 树? 在我的上一篇文章《二分搜索树与二分查找法》中,详细介绍了二分搜索树这种数据结构。二分搜索...

  • 二分算法-LeetCode 69

    二分算法-LeetCode 69 二分算法 二分算法模板, 二分搜索即搜索一个数,如果存在,返回其索引,否则返回-...

  • Pearls9. 代码调优

    [TOC] 问题:在包含1000个整数的表中进行二分搜索: 二分搜索的调优 说明:在二分搜索中通常不需要代码调优 ...

  • Pearls4 编写正确的程序

    4.1 二分搜索

  • 手敲数据结构——使用二分搜索树实现Set

    关于实现二分搜索树,可以看前面的文章 手敲数据结构——二分搜索树

  • 分治算法(二分搜索)

    每日一言 : 当我们真正热爱这世界时,我们才真正生活在这世上。——泰戈尔 二分搜索 什么是二分搜索 二分搜索又叫二...

网友评论

      本文标题:二分搜索

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