3 个版本
0.1.2 | 2021年11月13日 |
---|---|
0.1.1 | 2021年11月13日 |
0.1.0 | 2021年11月13日 |
#1781 在 算法
6KB
79 行
功能说明
如果你的有序数组/vec 有重复项,二分查找将从数组的任意位置选择所需项。这个包提供了一些实用函数,可以帮助你找到该项第一次或最后一次出现的位置。
例如,查看这个有序数组示例
let arr = [1, 3, 4, 6, 6, 6, 6, 8, 12]
如果我们查找项目 6
,简单的二分查找将返回一个范围为3到6的索引。如果你需要精确地知道6
第一次/最后一次(或两者)出现的位置,这个包将对你有所帮助。
特性
- 支持多种类型。
- 代码简洁易懂。
- 时间复杂度:
O(logn)
,空间复杂度:O(1)
版本说明:在 README.md 中澄清描述
使用方法
这个包导出3个函数,分别是
find_first_idx
:找到项第一次出现的位置的索引。
find_last_idx
:找到项最后一次出现的位置的索引。
first_last_idx
:找到项第一次和最后一次出现的位置的索引。返回一个元组。
所有这3个函数都期望一个指向有序数组/Vector的引用,以及你正在查找的项。
快速入门
查找第一个索引
use bsutils::interface::find_first_idx;
fn main() {
let list = [1, 1, 4, 6, 7, 7, 7, 7, 9, 9, 11];
let given = 7; // the item we look for
let first_idx = find_first_idx(&list, given);
println!("{}", first_idx);
// Output: 4
}
查找最后一个索引
use bsutils::interface::find_last_idx;
fn main() {
let list = [1, 1, 4, 6, 7, 7, 7, 7, 9, 9, 11];
let given = 7; // the item we look for
let last_idx = find_last_idx(&list, given);
println!("{}", last_idx);
// Output: 7
}
查找第一个和最后一个索引
use bsutils::interface::first_last_idxs;
fn main() {
let list = [1, 1, 4, 6, 7, 7, 7, 7, 9, 9, 11];
let given = 7; // the item we look for
let both_idxs = first_last_idxs(&list, given);
println!("{}", both_idxs);
// Output: (4, 7)
}