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

二分查找

时间:2023-09-29 14:44:25浏览次数:32  
标签:二分 int System 查找 ints println out

  • 必须是1个有序的数组
  • 第1次推导
public class test {
    public static void main(String[] args) {
        int[] ints = {1,2,3,5,7,9};
        int a = 6; // 要查找的数
        int i=0; //起始位置
        int j=ints.length-1; // 结束位置
        int m; // 中间位置

        // 第1次查找
        //[1][2][3][5][7][9]
        // i     m        j
        if(i<=j){
            m = (i+j)/2;  // 2
            if(ints[m] < a){
                i = m + 1;  // 3
            } else if (ints[m] > a){
                j = m -1;
            } else {
                System.out.println("要查找的数的索引是" + m);
            }
        } // i=3,j=5

        // 第2次查找
        //[1][2][3][5][7][9]
        //          i  m  j
        if(i<=j){
            m = (i+j)/2;  // 4
            if(ints[m] < a){
                i = m + 1;
            } else if (ints[m] > a){
                j = m -1; // 3
            } else {
                System.out.println("要查找的数的索引是" + m);
            }
        }  // i=3,j=3

        // 第3次查找
        //[1][2][3][5][7][9]
        //         i|j
        if(i<=j){
            m = (i+j)/2;  // 3
            if(ints[m] < a){
                i = m + 1;  // 4
            } else if (ints[m] > a){
                j = m -1;
            } else {
                System.out.println("要查找的数的索引是" + m);
            }
        } // i=4,j=3

        // 数组中没有要查找的数的情况
        if(i>j){
            System.out.println("数组中没有要查找的数");
        }

    }
}
  • 最终完善
public class test {
    public static void main(String[] args) {
        int[] ints = {1,2,3,5,7,9};
        int a = 6; // 如果传入0或10则会报错
        Find(a, ints);
    }

    public static int Find(int a, int[] ints){
        int i=0; //起始位置
        int j=ints.length-1; // 结束位置
        int m; // 中间位置
        while (i<=j){
            m = (i+j)/2;
            if(ints[m] < a){
                i = m + 1;
            } else if (ints[m] > a){
                j = m -1;
            } else {
                System.out.println("要查找的数的索引是" + m);
                break;
            }
        }
        if(i>j){
            System.out.println("数组中没有要查找的数");
        }
        return -1;
    }

}

标签:二分,int,System,查找,ints,println,out
From: https://www.cnblogs.com/dogleftover/p/17736983.html

相关文章

  • [LeetCode] 2251. 花期内花的数目 - 二分查找/有序数组
    Problem:2251.花期内花的数目思路看题目应该是一道比较经典的差分,本来准备拿差分数组做的,后来搂了一眼题解,发现用二分的方法更简单解题方法此题有一种很简便的方法,第i个人到达时间为people[i],所以我们不难找到在这个时间之前花期已经开始的花的数量,即v1=start<=people[i]......
  • [Linux] shell文本处理记录 - 查找、增删特定行及附近行
    转:https://blog.csdn.net/wy_hhxx/article/details/127416595查找username所在行并删除此行,输出到新文件sed'/username/,+d'04filename.log>04filename_new.log 目录1.grep查找关键字所在行号、查找关键字前后行2.sed删除指定行及其前后若干行3.sed在匹配行前或后添......
  • By.CSS_SELECTOR 定位查找元素 并输出文本
     代码 定位到元素后打印出文字defget_text(self):element=driver.find_element(By.CSS_SELECTOR,"#sidebar_bh[href*='vip']")print(element.text) ......
  • 二分类、多分类、二值交叉熵、Focal交叉熵【未写完】
     Focal交叉熵:上面式子是一个交叉熵的改进版本,多了一个权重系数pos_weight,表示图像中,正例、负例的比例,那个越少,就越重视哪一个。好好感受下,loss|y_pred=0.8  loss|y_pred=0.2应该是“相等”的,这是上面式子设计的初衷!下面是Focalloss的式子:式中,α就是上面......
  • 根据类名查找元素时 因为类名包含空格导致报错
    #导包importtimefromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromtimeimportsleep#引用谷歌驱动driver=webdriver.Chrome()driver.get(r"D:\python-pro\baseapitest\xpath\html.html")#输入密码driver.find_element(By.CLA......
  • 较难理解的字符串查找算法KMP
    时间复杂度O(n)的子串查找算法。经典实例主字符串(s):abcabcabd模式串(t):abcabd比较次数   主字符串   模式串   备注一   abcabcabd   abcabd   红色和绿色表示正在比较的子串,红色表示不同部分,绿色表示相同部分。二   abcabcabd   abcabd  ......
  • linux 查找
    一、文件查找1.按照名称精确查找(全局查找)找到所有这个文件[root@localhost/]#find/-nametnsnames.ora 按照名称精确查找(当前路径查找)​​​​​​​[root@localhost/]#find.-namei-bpm.jar2.按照名称模糊查找(全局查找&指定目录查找)[......
  • 典型二分:杰瑞吃奶酪
    题目描述:某一天,老鼠杰瑞抓住了一个机会,成功的到达了冰箱的附近,正当杰瑞打开冰箱门,想要享受美味的奶酪的时候,没想到冰箱里的奶酪太多了,奶酪洒了一地。汤姆猫听到了这个动静,正在火速赶往冰箱想要抓住杰瑞。杰瑞凭借与汤姆多年对抗的经历,仅凭借汤姆的脚步声便能推断汤姆还有多久抵达......
  • 算法基础之二分查找
    原题链接二分查找中的mid+1和mid-1的问题二分查找中的边界问题处理不好很容易导致死循环和计算错误的问题,以题目数的范围为例。题目大意​二分查找重复数第一次出现的位置和最后一次出现的位置。数学含义​第一次位置即找到一个长度最大的>=X区间的左边界​最......
  • 基本查找 / 顺序查找
    //基本查找/顺序查找核心:从0索引开始挨个查找//例:查询元素number是否存在int[]arr={131,127,147,81,103,23,7,79};System.out.println("请输入要查找的数:");Scannersc=newScanner(System.in);StringnumberString=sc.nextLine();intnumber=Integer.parseI......