提问人:Hax 提问时间:5/16/2021 最后编辑:greybeardHax 更新时间:5/16/2021 访问量:438
这种二进制搜索有什么问题?IndexOutOfBounds [复制]
What is wrong with this binary search? IndexOutOfBounds [duplicate]
问:
我正在尝试编写二进制搜索算法,但是 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
处。
答:
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
所以没问题??
评论