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

二分查找BinarySearch

时间:2024-02-05 10:34:14浏览次数:25  
标签:二分 int 元素 BinarySearch 中间 查找

二分查找法

  • 首先,整个数组必须有序,通常为递增。

  • 将数组中间数字与被比较元素比较

    • 相等即目标元素为被比较元素

    • 中间元素大于目标元素,意味着中间元素右边的所有元素均大于目标元素,排除

    • 中间元素小于目标元素,意味着中间元素左边的所有元素均小于目标元素,排除

  • 当数组元素个数为奇数,取中间元素

    为偶数时,取中间两元素任一即可

/**
 * @author 3DG
 * @Description 二分查找法 LeetCode704
 * @date 2024/2/5 9:59
 */
public class BinarySearch {
    public int binarySearch(int[] nums,int target){
        int left = 0;
        //最左即最小元素下标为0
        int right = nums.length-1;
        //最右即最大元素下标为数组长度减一
        while(left <= right){
            //存在最左(小)元素与最右(大)元素相等情况,故需要“=”
            int mid = (right + left)/2;
            //取中间元素
            if (nums[mid] == target){
                //中间元素与目标值相等,即该元素为目标元素
                return nums[mid];
            }else if(nums[mid]<target){
                //目标值在右区间,向右查找
                left = mid + 1;
            }else{
                right = mid - 1;
                //目标值在左区间,向左查找
            }
        }
        return -1 ;
    }
}

 

 


标签:二分,int,元素,BinarySearch,中间,查找
From: https://www.cnblogs.com/3-DG/p/18007486

相关文章

  • 【学习笔记】网络流与二分图初步
    网络流与二分图初步我们约定,对于有向图\(G=(V,E)\),分析复杂度时\(m=|E|,n=|V|\)。在分析时间复杂度时,网络流的实际表现基本都优于其理论上的时间复杂度表现。I概念(1)网络流:在一个有向带权图上(不考虑自环和重边),与最短路类似,我们定义一个源点\(s\)和一个汇点\(t\)......
  • 线段树二分——nc2.4多校_G.新春漫步
    目录问题概述思路分析参考代码做题反思问题概述原题参考G.新春漫步坐标轴上有n个点,初始时每个位置上都有一个坚固程度为a1的障碍物,接下来有m次操作1.将位置p上的障碍物的坚固程度减去x,若减去x后坚固程度小于等于0,则该障碍物消失2.询问一个人从p的位置向右走,最多能走到什么位......
  • windows查看端口占用,通过端口找进程号(查找进程号),通过进程号定位应用名(查找应用)(netstat
     文章目录通过端口号查看进程号`netstat`通过进程号定位应用程序`tasklist` 通过端口号查看进程号netstat在Windows系统中,可以使用netstat命令来查看端口的占用情况。以下是具体的步骤:打开命令提示符(CMD):按Win+R组合键打开运行对话框,输入cmd并按Enter键。......
  • 代码随想录算法训练营第一天 | 27. 移除元素 | 704. 二分查找
     704.二分查找 已解答简单 相关标签相关企业 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例1:输入:numstarget输出:解释:nums......
  • 基础算法(十四)离散化+二分 ---以题为例
    假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。现在,我们首先进行 n 次操作,每次操作将某一位置 x 上的数加 c。接下来,进行 m 次询问,每个询问包含两个整数 l 和 r,你需要求出在区间 [l,r] 之间的所有数的和。输入格式第一行包含两个整数 n 和 m。接下来 ......
  • 闭着眼睛写二分搜索
    本文就来探究几个最常用的二分查找场景:寻找一个数、寻找左侧边界、寻找右侧边界。而且,我们就是要深入细节,比如不等号是否应该带等号,mid是否应该加一等等。分析这些细节的差异以及出现这些差异的原因,保证你能灵活准确地写出正确的二分查找算法。另外再声明一下,对于二分搜索的每......
  • 费用流求解二分图最大权匹配
    二分图最大权匹配问题:有\(n_1\)个左部点,\(n_2\)个右部点,\(m\)条边,边有边权\(w_i\),表示若选择这条边就会获得\(w_i\)的收益,求获得收益最大的一种图的匹配方案。若考虑用费用流求解,建立超级源点\(S\)和超级汇点\(T\),\(S\)向每个左部点连边,流量1费用0;每个右部点向\(......
  • 二分答案
    二分法简介为一高效查找方法,将搜索范围一分为二。适用于有序数据集合,利用单调性减少不必要的枚举。解题步骤研究数据结构的单调性。确定最大区间[L,R],确保分界点一定在里头,若以R为答案,区间为[L+1,R](若为0到n,则L=-1,R=n),若以L为答案,答案区间为[L,R-1](同理)。可以参照二分查找lo......
  • 【洛谷 P2249】【深基13.例1】查找(向量+二分查找+递归)
    【深基13.例1】查找题目描述输入个不超过的单调不减的(就是后面的数字不小于前面的数字)非负整数,然后进行次询问。对于每次询问,给出一个整数,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出。输入格式第一行个整数和,表示数字个数和询问次数。第二行......
  • 【洛谷 P2249】【深基13.例1】查找(向量+lower_bound)
    【深基13.例1】查找题目描述输入个不超过的单调不减的(就是后面的数字不小于前面的数字)非负整数,然后进行次询问。对于每次询问,给出一个整数,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出。输入格式第一行个整数和,表示数字个数和询问次数。第二行......