Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中查找排序字符串数组中以指定字符串开头的第一个元素_Java_Algorithm_Search_Binary Search - Fatal编程技术网

在Java中查找排序字符串数组中以指定字符串开头的第一个元素

在Java中查找排序字符串数组中以指定字符串开头的第一个元素,java,algorithm,search,binary-search,Java,Algorithm,Search,Binary Search,我在Java中有一个排序字符串数组。我试图找到数组中以用户指定字符串开头的第一个元素。我起初以为是二进制搜索,但它找到的是相等的字符串,而不是以用户指定的字符串开头的字符串。我应该如何修改二进制搜索以便实现我想要做的事情 如果元素不存在,二进制搜索可以找到“比所需元素小的最后一个元素”(有时称为“插入该元素的索引”) 通过使用此功能进行二进制搜索,您可以找到一个元素并检查: 如果它是精确的元素,那么它就是数组中具有此前缀的第一个元素,因为它是具有此前缀的“最小”元素,您就完成了 如果它不是同一个

我在Java中有一个排序字符串数组。我试图找到数组中以用户指定字符串开头的第一个元素。我起初以为是二进制搜索,但它找到的是相等的字符串,而不是以用户指定的字符串开头的字符串。我应该如何修改二进制搜索以便实现我想要做的事情

如果元素不存在,二进制搜索可以找到“比所需元素小的最后一个元素”(有时称为“插入该元素的索引”)

通过使用此功能进行二进制搜索,您可以找到一个元素并检查:

  • 如果它是精确的元素,那么它就是数组中具有此前缀的第一个元素,因为它是具有此前缀的“最小”元素,您就完成了
  • 如果它不是同一个元素-通过增加一-你会得到“比所需元素大的最小元素”。此元素是具有此前缀的数组中的第一个元素(如果数组有前缀)
  • 这个功能非常常见——例如,它存在于java的应用程序中。从javadocs:

    返回:搜索键的索引(如果它包含在数组中);否则,, (((插入点)-1)。插入点被定义为点 将键插入数组的位置: 第一个元素大于键

    从刚刚找到的索引中,很容易找到所需的元素

    代码捕捉:

    String[] arr = { "aa" , "bb","c", "cc" , "ccc", "cccc", "ddD" };
    int idx = Arrays.binarySearch(arr, "c");
    if (idx < 0) 
        System.out.println(arr[-1 * idx - 1]);
    else System.out.println(arr[idx]);
    
    String[]arr={“aa”、“bb”、“c”、“cc”、“ccc”、“cccc”、“ddD”};
    intidx=Arrays.binarySearch(arr,“c”);
    if(idx<0)
    System.out.println(arr[-1*idx-1]);
    else System.out.println(arr[idx]);
    
    是的,该搜索可以/应该是二进制的。向我们展示您的代码,搜索“范围”有时有点复杂我正在使用标准库中的Arrays.binarySearch()方法。我不知道Arrays.binarySearch()可以做到这一点。谢谢你这么详细的回答。@ipman注意到我在最初的代码快照中遇到了一个小问题(did+1而不是-1),现在修复了它。