algorithm - 二进制搜索以查找布尔数组中的最高真实索引
问题描述
我有一个布尔数组,[true, false, false, false, true]
我需要找到最高索引(0到1000之间)true
,我认为二进制搜索是最好的方法,但我不知道如何调整算法来完成我需要的.
解决方案
二进制搜索可以应用于有序(非递减/非递增)函数。
您的布尔数组似乎没有这样的顺序。
像这样想,如果你在当前元素上说mid
,如果arr[mid] == false
,你会跳到哪里?右半边还是左半边?要决定从哪里跳转,您需要对布尔数组进行一些排序。
现在谈到你的问题,你可以有两种方法:
- 只需从结束索引反向循环并在遇到的第一个布尔值处中断。
- 如果您可以将布尔数组存储为位掩码表示,那么您可以及时找到最右边的设置位
log(n)
。
推荐阅读
- php - 如何仅显示单个数组?
- android - 未在 NotificationDataSetChanged 上更新 PageAdapter 的参数
- javascript - 如何编辑 Dojo 网格数据
- python - 使用 http.client 时如何修复无效的 URL 错误?
- r - 用 R plotly 创建差距分析
- javascript - Bootstrap 4 - carousel - 如何在移动设备上只设置一个活动课程?
- c++ - 如何使用 if 和 if else 语句在 C++ 中实现 1 位分支预测?
- ecmascript-6 - noUiSlider ES6 导入
- powershell - 如何修复 Get-ChildItem -Recurse 以处理多于第一级的问题
- html - 即使用户在输入框中没有输入任何内容,也让 Angular 在发送表单时使用初始输入数据