这种二进制搜索有什么问题?IndexOutOfBounds [复制]

What is wrong with this binary search? IndexOutOfBounds [duplicate]

提问人:Hax 提问时间:5/16/2021 最后编辑:greybeardHax 更新时间:5/16/2021 访问量:438

问:

我正在尝试编写二进制搜索算法,但是 Geeks for Geeks 练习问题二进制搜索产生以下错误:

Runtime Error:
Runtime ErrorException in thread "main" java.lang.ArrayIndexOutOfBoundsException: 

  Index 222 out of bounds for length 5

    at Solution.binarysearch(GFG.java:44)
    at GFG.main(GFG.java:22)

到目前为止,我写的是,

class Solution {
    int binarysearch(int arr[], int n, int k){
        
        if (arr == null) return -1;
        
        int begin = 0;
        int end = k;

            for (; begin < end;)
            {
                int mid = (begin + end) / 2;
                if (arr[mid] == n) return mid;
                if (arr[mid] > n)
                {
                    // in left part
                    begin = begin;  // for debug
                    end = mid; 
                }
                else
                {
                    // in right part
                    begin = mid + 1;
                    end = end; // for debug
                }
            }

            return -1;
    }
}

Geeks for Geeks 问题陈述&示例:

给定一个大小为 N 和整数 K 的排序数组,找到位于 使用二进制搜索将 K 存在于数组中。

示例 1

输入:N = 5 arr[] = {1 2 3 4 5} K = 4 输出:3 解释:4
出现在索引 3
处。

Java 数组 算法 binary-search arrayindexoutofboundsexception

评论


答:

0赞 Marat 5/16/2021 #1

替换为int end = k;int end = n-1;

k是您必须找到的数字,是数组大小n

评论

0赞 Hax 5/16/2021
为什么不只用 n 而不是 n-1 ?
0赞 Marat 5/16/2021
因为,它是从 0 开始的
0赞 Hax 5/16/2021
那又怎样????????
0赞 Marat 5/16/2021
如果数组大小为 3,则索引为 0、1、2(即 3-1 = 2)
0赞 Hax 5/16/2021
所以没问题??