【问题标题】:Java arrays.binary search multiple matches?Java arrays.binary 搜索多个匹配项?
【发布时间】:2016-06-22 06:09:16
【问题描述】:

我需要使用Arrays.binarySearch 方法查找排序数组中的所有元素。我想在lowerbound = pos + 1 中迭代二分查找(pos 是前一个匹配项),但binarySearch 不保证返回第一个匹配项(最小匹配索引)?

我该怎么做?

【问题讨论】:

    标签: java arrays binary-search


    【解决方案1】:

    您可以轻松地使用binarySearch 的结果来获取所有匹配项:

    long[] sortedArr = ...
    int index = Arrays.binarySearch (sortedArr, value);
    int first = index;
    int last = index;
    if (index >= 0) {
        while (first > 0 && sortedArr[first-1] == value)
            first--;
        while (last < sortedArr.length - 1 && sortedArr[last+1] == value)
            last++;
    }
    

    运行此代码后,firstlast(含)之间的索引都是包含搜索值的索引。

    【讨论】:

    • 我喜欢你。只是我想知道,也许我可以以“单行”样式进行迭代。
    • 没有大括号的循环不会在这里通过代码审查。
    猜你喜欢
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 2013-12-21
    相关资源
    最近更新 更多