【问题标题】:Binary search to find highest true index in array of booleans二进制搜索以查找布尔数组中的最高真实索引
【发布时间】:2020-10-18 01:08:08
【问题描述】:

我有一个布尔数组 [true, false, false, false, true],我需要找到最高索引(0 到 1000 之间),即 true,我认为二进制搜索是最好的方法,但我不知道如何调整算法以完成我所需要的。

【问题讨论】:

    标签: algorithm binary-search


    【解决方案1】:

    二分查找可以应用于有序(非递减/非递增)函数。
    您的布尔数组似乎没有这样的顺序。
    这样想,如果你在当前元素说mid,如果arr[mid] == false,你会跳到哪里?右半边还是左半边?要决定跳转到哪里,您需要对布尔数组进行一些排序。

    现在谈到你的问题,你可以有两种方法:

    1. 只需从结束索引反向循环并在遇到的第一个布尔值处中断。
    2. 如果您可以将布尔数组存储为位掩码表示,那么您可以在log(n) 时间找到最右边的设置位。

    【讨论】:

    • 问题是我不知道数组的长度,它可以是任意大小,所以我认为这行不通,对吧?
    • btw,顺序是我知道数组是从0到X,所以索引就是顺序,有意义吗?
    • 我不认为将 1000 bitsi 数组打包成 64 位块是值得的。在最坏的情况下,反向循环有 o(n) 次迭代,我相信平均而言它是 log(n)。可能是最优化的解决方案。
    • @YuriGinsburg 线性搜索的平均复杂度(假设数组分布是均匀的)是恒定的,O(1)
    猜你喜欢
    • 2021-11-02
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多