首页 > 编程语言 >数据结构算法 之 二分查找法(LC)

数据结构算法 之 二分查找法(LC)

时间:2022-12-18 15:44:06浏览次数:55  
标签:二分 LC 元素 二分法 查找 数组 数据结构 left

原文链接:https://blog.csdn.net/Luckyzhoufangbing/article/details/110389523

(一)定义
二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。

二分法查找的思路如下:

(1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。

(2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。

(3)如果某一步数组为空,则表示找不到目标元素。

二分法查找的时间复杂度O(logn)

(二)适用条件
(1)排好序的数组

(2)线性表具有有随机访问的特点(例如数组)可以通过下标 或者 key 直接取到,链表就不具备这样的特点

(3)线性表能够根据中间元素的特点推测它两侧元素的性质,以达到缩减问题规模的效果

(三)注意的几点
1. 双指针中间数值 index

var midIndex = parseInt((right + left) / 2)

2. 循环条件

while (left <= right)

2. 如果数组中没有要找的元素

最终 left 比 right 大,应该插入 left 所在的位置

(四)总结
二分查找一般由三个主要部分组成:

(1)预处理 —— 如果集合未排序,则进行排序。

(2)二分查找 —— 使用循环或递归在每次比较后将查找空间划分为两半。

(3)后处理 —— 在剩余空间中确定可行的候选者。

三个模版:https://leetcode-cn.com/leetbook/read/binary-search/xewjg7/

标签:二分,LC,元素,二分法,查找,数组,数据结构,left
From: https://www.cnblogs.com/zhu4c4/p/16990457.html

相关文章

  • 泛型和数据结构
    1定义:广泛的数据类型,用T或E表示只能是引用类型(基本类型数据用其包装类)2优势:(1)将运行时期的问题提前到编译器(2)避免强制类型转换(3)提高了程序的执行效率3使用一......
  • vlc播放阿里云盘视频,可通过此方法解决网页无法读取视频内嵌字幕的问题
    1、在点击视频文件前,打开f12获取阿里云盘视频链接,复制download_url:  2、拼接vlc播放命令:./vlc.exe--http-referrer="https://www.aliyundrive.com/""第一步中的do......
  • 二分查找python与java实现
    定义给定以下情景,假设有一个有序的数组(从大到小排列),我们需要从中找出我们所需的目标元素并返回其索引。一般的思想是可以使用for循环进行遍历,直到找到目标元素......
  • 二分搜索算法
    二分搜索算法适用于有序数组。如果按照暴力搜索算法,那么需要从头到尾遍历数组元素,时间复杂度为O(n),而如果使用二分搜索,那么其时间复杂度为O(logn),根据时间复杂度曲线图可......
  • java数据结构与算法(day2)--简单排序
    模式:设计api实现api简单排序举例(商品排序)1.1Comparable接口介绍(排序算法更有通用性:对象排序)创建对象,并且生成豆子。创建Comparable接口1packagecn.itcast.algor......
  • redis底层数据结构之字典(dict)
    字典(dict)字典又称为符号表或者关联数组、或映射(map),是一种用于保存键值对(key-value)的抽象数据结构字典中的每个key都是唯一的,通过key对值来进行查找或修改,时间复杂......
  • redis底层数据结构之跳表(skiplist)
    跳表(跳跃表,skiplist)跳跃表(skiplist)是用于有序元素序列快速搜索查找的数据结构,跳表是一个随机化的数据结构,实质是一种可以进行二分查找的、具有层次结构的有序链表......
  • redis底层数据结构之整数集合(intset)
    整数集合(intset)当一个集合只包含整数值元素,并且这个集合的元素数量不多时,redis会使用整数集合(intset)作为集合键的底层实现整数集合用于保存整数值的集合抽象数据类型......
  • redis底层数据结构之简单动态字符串(SDS)
    简单动态字符串(simpledynamicstring,SDS)redis使用C语言编写的,但是redis的字符串却不是C语言中的字符串(以空字符'\0'结尾的字符数组),redis定义了一种简单动态字符串(s......
  • redis底层数据结构之双向链表(linkedlist)
    双向链表(linkedlist)redis的双向链表(linkedlist)是基于链表的一种数据结构链表是一种常见的基础数据结构,是一种非顺序存储数据的线性表,在每一个节点里存储了下一个节点......