首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >二进制搜索程序不能打印正确的索引

二进制搜索程序不能打印正确的索引
EN

Stack Overflow用户
提问于 2021-10-30 18:09:22
回答 1查看 64关注 0票数 0

我需要创建一个二进制搜索程序,如果搜索键在数组中,它返回ai等于key的最大索引i,否则返回-i,其中i是最大的索引,使得ai小于key。

示例运行如下所示。

更多input.txt 2 3 4 5 6 6 6 7 8 9 11

java BinarySearch input.txt 10

-9

java BinarySearch input.txt 6

6

到目前为止,程序将为输入文件中的数字打印正确的索引,但当我输入一个不在列表中的数字时,它不会打印-i。例如,当我在命令行中输入10时,它不会打印-9;相反,它会打印-10。

代码语言:javascript
运行
复制
public class BinarySearch{

    public static int search(int key, int [] a, int lo, int hi)
    {  
        int n = a.length;
        
    if (hi >= lo) 
        {
        int mid = lo + (hi - lo) / 2;
        if      ((mid == n-1 || key < a[mid+1]) && a[mid] == key) 
        return mid;
        else if (key < a[mid]) 
        return search(key, a, lo, (mid-1));
        else return search(key, a, (mid+1), hi);
        }   
    return -1*lo;
    }
    public static void main (String [] args)
    {
        In in = new In(args[0]);
        
        int key = Integer.parseInt(args[1]);
        
        int [] a = in.readAllInts(); 
        
        System.out.println(search(key, a, 0, a.length-1));

    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-10-31 06:45:11

代码语言:javascript
运行
复制
    public static int search(int key, int [] a, int lo, int hi)
    {
        int n = a.length;

        if (hi > lo)
        {
            int mid = lo + (hi - lo) / 2;
            if ((mid == n-1 || key < a[mid+1]) && a[mid] == key)
                return mid;
            else if (key < a[mid])
                return search(key, a, lo, (mid-1));
            else return search(key, a, (mid+1), hi);

        } else if(hi == lo && n == hi) {
            return -1*(lo);
        } else if(lo > hi) {
            return -1;
        }
        return -1*(lo-1);
    }

我添加了两个条件:

hi==lo && hi == n表示数组的最大值小于key且search()返回最高索引时的

  • -(I)当lo > hi表示数组的最小值大于key且-1\f25 search() -1\f6返回-1\f25

-1\f6<-1\f25 G210-1\f6

并编辑了当lo == hihi != n返回前一个索引(i)时在return -1*(lo-1);之前不满足的所有其他条件

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69780890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档