我在Java中有一个排序的String数组。我试图找到第一个以该数组中用户指定的String开头的元素。我首先考虑二进制搜索,但它找到相等的String而不是以用户指定的String开头的String。我应该如何修改二进制搜索,以便实现我想要做的?
答案 0 :(得分:6)
如果元素不存在,二进制搜索可以找到“小于所需元素的最后一个元素”(有时称为“应该插入它的索引”)。
通过使用此功能进行二元搜索,您可以找到一个元素并检查:
此功能非常常见 - 例如,它存在于java的Arrays.binarySearch()
中。来自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]);