首页 > 其他分享 >二分查找!

二分查找!

时间:2024-02-02 11:45:26浏览次数:47  
标签:二分 数字 元素 查找 数组 排序 缺失

使用范围:

  1. 查找元素: 在有序数组中查找一个特定的元素。

  2. 找到边界: 查找有序数组中某个值的第一个或最后一个出现的位置。

  3. 搜索旋转排序数组: 在旋转排序数组中查找一个特定的元素。

  4. 查找峰值元素: 在数组中查找峰值元素。

  5. 求平方根: 计算一个非负整数的平方根。

  6. 搜索区间: 在有序数组中找到给定目标值的起始和结束位置。

  7. 缺失的数字: 在从 0 到 n 中缺失的数字。

  8. 搜索二维矩阵: 在二维矩阵中搜索一个值。

  9. 分割数组的最大值: 将数组分割为 m 段,使得每一段的和最大。

  10. 寻找旋转排序数组中的最小值: 在旋转排序数组中找到最小元素。

 

找边界:

 

 

找峰值

 

找平方根

 

找缺失的数字:如果缺失的数字在左侧,那么数组中索引位置小于该数字的元素值应该等于索引;如果缺失的数字在右侧,那么数组中索引位置大于等于该数字的元素值应该大于索引。

要求(数组顺序递增,而且只能找到一个)

如果缺失的数字很多,用unordered_map解决复杂度为On

 

 寻找旋转排序数组中的最小值

 

 

标签:二分,数字,元素,查找,数组,排序,缺失
From: https://www.cnblogs.com/zhangdudu/p/18002891

相关文章

  • 在排序数组中查找元素的第一个和最后一个位置
    34FindFirstandLastPositionofElementinSortedArray问题描述:给定一个按照升序排列的整数数组nums,和一个目标值target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是O(logn)级别。如果数组中不存在目标值,返回[-1,-1]。示例1:输入:n......
  • List<ParamItem> lists,里如何查找里面id=3行,所在的value
    如果你有一个名为lists的List<ParamItem>,并且想要查找其中id为3的行,并获取对应的value值,可以使用Java8引入的StreamAPI来实现。下面是一个示例代码:importjava.util.List;importjava.util.Optional;publicclassMain{publicstaticvoidmain(String[......
  • 洛谷二分题单和二分算法
    在题目有出现极值的时候可以运用二分算法,像最小值最大化和最大值最小化又或者像会有中位数,大于这个数的时候可以把他全部视为1小于这个数可以全部视为0,这样隐藏的单调也是可以运用二分。最难的好像就是check函数的设计板子的不同会导致L,R和mid的关系不然会超时,L+1<R的L是=mid,而L......
  • 【学习笔记】二分图匹配 匈牙利(NTR)算法
    时间复杂度显然,这个算法的时间复杂度是O(一边的点数*边数)因为最坏情况就是每一个点都要把所有的边问一遍能不能匹配显然,常数极小另外可以留意一下数据范围,因为如果是稠密图(\(n=500m=2e5\)这种)就可以考虑邻接矩阵存图,方便判重边S准备以下是跑Ntr算法要用的一些东西如果题......
  • 二分查找
    704.二分查找(Easy)问题描述:给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。示例1:输入:nums=[-1,0,3,5,9,12],target=9输出:4解释:9出现在nums中并且下标为4示例2:输......
  • 查找目录中所有内容文本中不含某个特定字符串的文件列表
    查找目录中所有内容中不含某个特定字符串的文件的列表find/your/search/dir-typef!-execgrep-q"PatternString"{}\;-print-typef表示只查找文件;!表示对匹配条件进行取反,即不含特定字符串;{}\; 将每个被找到的文件作为参数传递给find后面的grep命令,其中:花......
  • C语言实现二分法
    现在有一个任务:从一堆有序数字中找出其中一个数字有两种方法1)从头到尾依次寻找2)从该些数字中中间部位比较若小于要找数字则在后半部分否则在前半部分再进行这样的方式进行循环,直至找到或找不到此数字现介绍这样的方法——二分法在计算机科学中,二分搜索(英语:binarysearch),也称折半搜......
  • 二分查找的改进
    publicstaticintbinarySearch(int[]arr,inttarget){//设置左边位置intleft=0;//设置右边位置intright=arr.length-1;//循环条件:如果左边位置小于等于右边位置while(left<=right){//中间位置等于(左边+右边)/2intmid=(right+left)>>>1;......
  • 随机二分
    思想随机二分即随机在当前的二分区间内找出一个元素作为\(mid\),并和普通二分一样收缩左右端点。由于每次合法区间长度期望折半,于是复杂度仍然正确,\(O(\logn)\)次收缩即可使区间中只有一个元素。在元素容易比较,容易求排名,而难以根据排名求元素时可以考虑随机二分。简单应用......
  • 二分查找(折半查找)
    二分查找的前提:数组中的数据必须是有序的核心思想:每次排除一半的数据,查询数据的性能明显提高很多实现步骤1.定义两个变量,一个代表左边位置,一个代表右边位置2.定义一个循环控制折半3.每次折半,都算出中间位置处的索引4.判断当前要找的元素值,与中间位置处的元素值的大小情况往......