【问题标题】:How can I use binary search to search for the first item in a List greater than a specific value?如何使用二进制搜索来搜索列表中大于特定值的第一项?
【发布时间】:2011-08-21 14:36:05
【问题描述】:

使用 Java。列表已排序,因此我想使用二进制搜索。我不想写额外的代码,有没有内置的方法可以做到这一点?

【问题讨论】:

    标签: java list search binary


    【解决方案1】:

    试用 Arrays 的 JavaDocs,binarySearcy() 有大约 17 个函数定义

    这里还有一些实现

    编辑:

    尽管您说您不想编写代码,但它确实是获得您想要的东西的可靠方法。并一路学习:)

    http://www.java-tips.org/java-se-tips/java.lang/binary-search-implementation-in-java.html http://en.wikibooks.org/wiki/Algorithm_Implementation/Search/Binary_search

    【讨论】:

    • 喜欢这个名字,必须查一下它的意思。 ;)
    • 我知道你说过你真的不想写新代码。但是鉴于 api 中可用的内容,请尝试我添加到帖子中的一些代码 sn-ps
    • 我们在这里处理排序列表,所以我认为使用集合框架比使用数组框架更合乎逻辑。
    • +1 我也同意你的观点,Collecitons 是个好主意。在 binarySearch 的规范中,必须根据指定的比较器对列表进行升序排序。把你的积分给@zloster(我还没喝咖啡)
    【解决方案2】:

    你看过Collections.binarySearch吗?这基本上是搜索部分 - 然后您需要查看结果是否为负(即未找到完全匹配),如果是,则采用按位补码来查找项目 的位置已插入。

    【讨论】:

    • “取按位补码”是什么意思?
    • 哦,我现在明白了。我查看了 Collections.binarySearch 但没有注意到“插入点”部分。非常感谢!!!
    • 哦,顺便说一句,我意识到如果列表中有多个具有相同值的项目,那么 binarySearch 在搜索该值时不会给出我想要的结果。我希望第一项的索引实际上等于或大于给定值。
    • @Thi:如果可能有重复,binarySearch 会给你一个有效的索引值......所以你会想要向后看,直到你找到并且具有较低值的索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 2022-08-16
    • 1970-01-01
    • 2017-07-06
    • 2014-07-10
    相关资源
    最近更新 更多