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