【发布时间】:2020-10-18 01:08:08
【问题描述】:
我有一个布尔数组 [true, false, false, false, true],我需要找到最高索引(0 到 1000 之间),即 true,我认为二进制搜索是最好的方法,但我不知道如何调整算法以完成我所需要的。
【问题讨论】:
我有一个布尔数组 [true, false, false, false, true],我需要找到最高索引(0 到 1000 之间),即 true,我认为二进制搜索是最好的方法,但我不知道如何调整算法以完成我所需要的。
【问题讨论】:
二分查找可以应用于有序(非递减/非递增)函数。
您的布尔数组似乎没有这样的顺序。
这样想,如果你在当前元素说mid,如果arr[mid] == false,你会跳到哪里?右半边还是左半边?要决定跳转到哪里,您需要对布尔数组进行一些排序。
现在谈到你的问题,你可以有两种方法:
log(n) 时间找到最右边的设置位。【讨论】:
O(1)。