首页 > 其他分享 >二分查找以及二分查找的变形

二分查找以及二分查找的变形

时间:2022-12-13 00:34:16浏览次数:47  
标签:二分 num 变形 mid int 查找 array

二分查找以及二分查找的变形

常规二分查找:在有序数组中找到num

代码:

//1.常规二分查找 首先需要保证这个数组是有序的
    //在有序数组中找到num
    public static boolean find(int[] array,int num){
        //定义一个”左指针“
        int left = 0;
        //定义一个"右指针"
        int right = array.length - 1;
        if(array == null || array.length == 0){
            return false;
        }
        //当左指针<=右指针的时候进行二分查找
        while (left <= right){
            //定义一个中间节点
            int mid = (left + right) / 2;
            if(array[mid] == num){
                return true;
            }else if (array[mid] > num){
                right = mid - 1;
            }else if (array[mid] < num){
                left = mid + 1;
            }
        }
        //证明没有找到这个元素
        return false;
    }

非常规二分查找:找到数组中>=num最左的位置

代码:

 //2.二分查找的变形
    //在数组中找到>=num 最左的位置
    public static int leftFindMost(int[] array,int num){
        if(array == null || array.length == 0){
            return -1;
        }
        //定义一个”左指针“
        int left = 0;
        //定义一个”右指针“
        int right = array.length - 1;
        //定义一个变量用来存储最左边的位置
        int ans = -1;
        //当left <= right 的时候进行二分查找
        while (left <= right){
            //定义一个中间位置
            int mid = (left + right) / 2;
            //当array[mid]>=num的时候就在mid的左边继续二分查找看是否还有>=num的数组元素并更新ans的值
            if(array[mid] >= num){
                ans = mid;
                right = mid - 1;
            }else if (array[mid] < num) {
                //如果array[mid]的值<num就在mid的右边继续查找
                left = mid + 1;
            }
        }
        //最后返回ans如果返回的是-1就说明在这个数组中没有>=num的数组元素
        return ans;
    }

非常规二分查找:在数组中找到<=num最右边的位置

代码:

//2.1二分查找的变形
    //在数组中找到<=num 最右边的位置
    public static int rightFindMost(int[] array, int num) {
        //定义一个”左指针“
        int left = 0;
        //定义一个”右指针“
        int right = array.length - 1;
        //定义一个变量用来存储最右边的位置
        int ans = -1;
        //当left < right 的时候就进行查找
        while (left <= right) {
            //定义一个中间位置的变量
            int mid = (left + right) / 2;
            if (array[mid] <= num) {
                //当找到一个数组元素>=num的时候就更新ans的值并在mid的右边继续进行查找
                ans = mid;
                left = mid + 1;
            }else{
                right = mid - 1;
            }
        }
        //最后返回ans如果最后返回的是-1就说明在这个数组中没有找到这样的数组元素
        return ans;
    }

标签:二分,num,变形,mid,int,查找,array
From: https://www.cnblogs.com/ygstudy/p/16977526.html

相关文章

  • 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......
  • atcoder beginner contest 144 Gluttony(二分答案)
    题目大意:有an,bn,我们找到an和bn每个元素的一种一一对应关系。使得min(max(ai*bi))。已知我们可以进行操作让an中的任一个元素减少1。操作数最大为k,问我们怎么操作,可以min(......
  • C语言 (数据结构)在顺序表中用二分查找和冒泡排序算法
    main.c:#include<stdio.h>#include<stdlib.h>#include"SequenceList.h"intmain(){//创建顺序表和指针SequenceListSL,*P_SL;intchoice=0;......
  • 算法与数据结构实验五 查找
    实验项目名称:实验五    查找  一、 实验目的1.掌握散列表的建立2.掌握散列查找算法的实现。二、 实验内容6-2线性探测法的查找函数试实现线性探测法的查找函......
  • Linux查找find命令全面剖析
    Linux查找find命令全面剖析1.文件查找在文件系统上查找符合条件的文件1.1简述locate命令非实时查找(数据库查找)依赖于事先构建的索引,索引的构建是在系统较为空闲时自动......
  • 必备技能,MySQL 查找并删除重复行
    本文讲述如何查找数据库里重复的行。这是初学者十分普遍遇到的问题。方法也很简单。这个问题还可以有其他演变,例如,如何查找“两字段重复的行”(#mysqlIRC频道问到的问题)......
  • Selenium10--查找一组元素
    find_element方法查找一个元素用find_element方法,返回一个webelement页面元素对象。""" 打开首页,关键字文本框反复输入,搜索后再次输入"""fromseleniumimportweb......