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

二分查找

时间:2022-09-04 17:55:57浏览次数:60  
标签:二分 int 复杂度 value 查找 给定

一、时间复杂度

假设数据量是n、则每次查找的数据量分别是n、n/2、n/4、n/8、……n/2^k 。

k就是在找到数据的时候总共缩小的次数、而每次缩小的操作都只涉及两个数的操作、时间时间复杂度就是 n/2^k=1、即只剩一个数据的时候。k=log2n、所以时间复杂度就是O(logN)。

二、使用条件

1、依赖顺序结构-数组

2、给定的数组需要有序

3、数据量过大或者过小都不适合二分查找。

->需要全部将数据加载到连续的内存当中、比如100M的数据、或者1G的数据、都需要对应的连续内存。

三、案例

1、查找指定数组中给定值的第一个值的下标

 1 /**
 2      * 二分查找
 3      * 查找数组中 第一个值为value 的下标 不存在返回-1
 4      * @param arr
 5      * @param len
 6      * @param value
 7      * @return
 8      */
 9     public static int binarySearch(int [] arr, int len,int value){
10         int low =0;
11         int high=len-1;
12         while(low<=high){
13             int mid=low+((high-low)>>1);
14             int temp=arr[mid];
15             if(temp>value){
16                high=mid-1;
17             }else if(temp<value){
18                 low =mid+1;
19             }else{
20                 if(mid==0 || arr[mid-1]!=value){//索引为第一个 则肯定是
21                     return mid;
22                 }else{//如果找到的索引的前一个仍然是的话、则需要调整最高索引的值
23                     high=mid-1;
24                 }
25             }
26 
27         }
28         return -1;
29     }

2、其他变种案例

a、查找最后一个等于给定值

b、查找第一个大于等于给定值

c、查找最后一个小于等于给定值

 

 

 

标签:二分,int,复杂度,value,查找,给定
From: https://www.cnblogs.com/richicewoo/p/16655585.html

相关文章

  • Leetcode — 34. 查找有序数组中元素的第一个和最后一个位置
    Leetcode—34.查找有序数组中元素的第一个和最后一个位置题目:查找排序数组中元素的第一个和最后一个位置难度:medium语言:Python中文题意:给一串以递增排序的整数......
  • 二分查找
    一、思路使用二分查找的前提是数组是有序的,思路是把整个数组根据中点一分为二,如果target小于中点,则将搜索目标缩小为左半部分再继续搜索,否则搜索目标缩小为右半部分,直到找......
  • 二分法查找
    1.需求:给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。2.示例:输入:nums=[-......
  • 机器学习中的数值查找算法(5)——字符串查找算法(Boyer-Moore算法)
    原文链接:机器学习中的数值查找算法(5)——字符串查找算法(Boyer-Moore算法)–每天进步一点点(longkui.site)Boyer—Moore算法简称BM算法,它是在字符串查找的方法中桐KMP......
  • 计算机视觉:使用 Open Food Fact 数据集的产品查找器
    计算机视觉:使用OpenFoodFact数据集的产品查找器项目深网在实现赫蒂克学校硕士IDATA&AI作者:路易斯·查尔斯,昆汀·查洛平,马克西姆王子项目经理:鲁......
  • 二分图
    二分图,顾名思义,能分成两部分,每部分之间没有边的图。判定很简单,染色法,没有奇环就行。voiddfs(intx,intcol){ v[x]=col; for(inti=head[x];i;i=edge[i].next){ if(!......
  • 2019ACM-ICPC 西安邀请赛 D.Miku and Generals——二分图染色+01背包
    目录题意思路代码目录题意将n个将军卡片分成两份,要求两份卡片之间的差值尽可能小,求最大的那一份卡片的和,这里有m组卡片是不能放在同一份的思路对有矛盾的组我们建图进......
  • 机器学习中的数值查找算法(3)——哈希查找算法
    原文链接:机器学习中的数值查找算法(3)——哈希查找算法–每天进步一点点(longkui.site)0.前言前面介绍的查找算法均是基于有序序列的查找方式,哈希查找是通过计算元素......
  • 学习:python进阶 属性查找顺序,隐藏属性,开放接口
          隐藏属性    开放接口 ......
  • D. 2+ doors(构造 二分图) CF 1715D
    题目:​ 现在有一个长度为n的序列待构造,给出m对关系\(i,j,x\),表示\(a_i|a_j=x\),请在满足这m对关系的情况下构造出的最小字典序的序列。分析:​ 每当我们看到最小字典序的......