Java中列表的二进制搜索
如果在列表中找到元素,我希望我的函数返回“是”,而返回“否” “如果找不到 我已经编写了以下代码(二进制搜索),但是一些测试用例失败了 然而,我为线性搜索编写了代码,所有测试用例都通过了 我写了这个程序Java中列表的二进制搜索,java,list,binary-search,Java,List,Binary Search,如果在列表中找到元素,我希望我的函数返回“是”,而返回“否” “如果找不到 我已经编写了以下代码(二进制搜索),但是一些测试用例失败了 然而,我为线性搜索编写了代码,所有测试用例都通过了 我写了这个程序 static String findNumber(List<Integer> arr, int k) { int l=0; int r= arr.size()-1; int flag=0; while(l<=r){ int m
static String findNumber(List<Integer> arr, int k) {
int l=0;
int r= arr.size()-1;
int flag=0;
while(l<=r){
int m = l + (r - l) / 2;
if(arr.get(m)==k){
return "YES";
//flag=1;
}
else if(arr.get(m)<k){
l=m+1;
}
else
r = m-1;
}
// if(flag==1){
// return "YES";
// }
return "NO";
}
静态字符串findNumber(列表arr,int k){
int l=0;
int r=阵列大小()-1;
int标志=0;
while(l您的二进制搜索函数是正确的。可能是其他原因导致它出错。请确保您的列表已排序,并且输入中的所有数字都适合int(不需要long)。您的二进制搜索函数是正确的。可能是其他原因导致它出错。请确保您的列表已排序,并且输入中的所有数字都适合int(不需要long).这是一个必须使用二进制搜索的作业吗?如果不是,你基本上可以返回arr.contains(k)?“是”:“否”
@deHaar:不是这样,但我相信二进制搜索会很快,所以我想使用它而不是线性搜索。是的,它会更快(O(n)>O(log(n)))从头开始实现它是一个很好的实践。我现在想知道List.contains(…)
中使用了什么算法。可能是二进制搜索,但我不这么认为……您的实现将比ArrayList.contains()更快
,但我不知道您使用的是列表的什么实现。取决于实现……您可以接受@ErfanAlimohammadi给出的答案。这是一个必须使用二进制搜索的作业吗?如果不是,您基本上可以返回arr.contains(k)?“是”:“否”
@deHaar:不是这样,但我相信二进制搜索会很快,所以我想用它而不是线性搜索。是的,它会更快(O(n)>O(log(n)),从头开始实现它是一个很好的实践。我现在想知道List.contains(…)中使用了什么算法
。可能是二进制搜索,但我不这么认为……您的实现将比ArrayList.contains()更快
,但我不知道您使用的是列表的什么实现。取决于实现……您可以接受@ErfanAlimohammadi给出的答案。:我现在有问题了。谢谢。数组没有排序。:我现在有问题了。谢谢。数组没有排序。