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

二分查找

时间:2022-12-13 22:57:00浏览次数:33  
标签:二分 题目 查找 答案 check 单调

【二分查找】(O(logn))

1.什么是二分查找

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法

2.条件

首先需要明确的是二分查找的对象应满足单调性,此外在查找过程中需时刻注意边界(卡死循环就寄了)

具体代码如下

int l=1,r=n;//设立边界 
while(l<=r){
    int mid=l+r>>1;//取中间值 
    if(check(mid)) l=mid+1;//满足条件时意味着另一边的也符合要求所以要移动边界找到the best one 
    else r=mid-1;//同上 
}

【二分答案】

1.什么是二分答案

二份答案即使用二分查找在一个满足单调性的区间[l,r]中查找一个最符合要求的答案

关键词:最大XX最小值,最小XX最大值

2.什么是check(上代码所提及的函数)

check函数,顾名思义,就是对于当前查找的答案mid进行验证,验证其是否符合题目要求,进而对当前区间做出修改

而对于check的编写,因为我很菜,做的题也不多,但到现目前我做的二分答案的所用的check都是将查找到的答案进行模拟,然后在模拟过程中根据题目的要求返回true or false

3.如何找到题目中可以被二分的对象

(1)如果给出的序列满足单调性  如果题目的答案是序列中的某数,那么可以试着对序列进行二分查找(l=1,r=n)

(2)如果给出的序列不满足单调性 如果题目的答案为方案数或者最...(例如砍树、奥特曼打怪、建别墅+),那么可以试着对于方案数或者最...的极大值进行二分查找(区间不定,视题目而设)

(3)没有明显给出的单调性    如果题目看起来不可能用二分,那么可以试着用代数式表示一些变量间的关系,根据关系式作出函数图像,截取图像中具有单调性且正确的一段进行二分

标签:二分,题目,查找,答案,check,单调
From: https://www.cnblogs.com/LizLJ24/p/16980904.html

相关文章

  • 数组里暴力查找单身狗和'^'异或快速查找单身狗
    intmain(){ chararr[]={1,2,3,4,5,7,5,1,2,3,4}; intsz=sizeof(arr)/sizeof(arr[0]); inti,ret=0; //0^a=a,a^b^a=b,a^a=0,异或满足交换规律,相同为0,反之为1; ......
  • 查找给定区间内第K大的元素
    查找给定区间内第K大的元素:(一)方法一:最小堆:O(n*lg(k))(1)思想:1.建立一个大小为k的最小堆2.注意:是给定区间,堆中存放的是给定区间的元素,不是给定区间的元素不会存放。说明:......
  • #yyds干货盘点# 名企真题专题: 二分查找
    1.简述:描述对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。给定一个整数数组A及它的大小n,同时给定要查找的元素val,......
  • CAD查找替换文字时如何使用通配符?CAD通配符使用技巧(一)
    通配符是一种特殊语句,主要有星号和问号,用来模糊搜索文件。那么,CAD查找替换文字时如何使用通配符呢?本文小编就来给大家分享一下浩辰CAD软件中查找替换文字时使用通配符的操......
  • 四种二分查找法模板
    publicclassBinarySearch{publicstaticvoidmain(String[]args){int[]arr={1,2,3,3,3,4,5,5,7};intupper1=floor_lower(arr,3);......
  • 二分查找以及二分查找的变形
    二分查找以及二分查找的变形常规二分查找:在有序数组中找到num代码://1.常规二分查找首先需要保证这个数组是有序的//在有序数组中找到numpublicstaticboole......
  • DS哈希查找—二次探测再散列
    题目描述定义哈希函数为H(key)=key%11。输入表长(大于、等于11),输入关键字集合,用二次探测再散列构建哈希表,并查找给定关键字。输入测试次数t每组测试数据格式如下:哈希......
  • 【LeetCode】二分法--剑指 Offer 53 - I. 在排序数组中查找数字 I
    点击直达题目内容统计一个数字在排序数组中出现的次数。示例示例1:输入:nums=[5,7,7,8,8,10],target=8输出:2示例2:输入:nums=[5,7,7,8,8,10],target......
  • 查找
    importjava.util.Scanner;publicclassEext{publicstaticvoidmain(String[]args){String[]str={"lala","koko","joke"};A02a02......
  • 力扣182(MySQL)-查找重复的电子邮箱(简单)
    题目:编写一个SQL查询,查找 Person 表中所有重复的电子邮箱。示例: 解题思路:方法一:使用groupby按Email来分组,然后使用having选择count(id)>1的就可以得到重复的Em......