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给出的答案。:我现在有问题了。谢谢。数组没有排序。:我现在有问题了。谢谢。数组没有排序。