2个版本
0.1.1 | 2021年7月30日 |
---|---|
0.1.0 | 2021年7月30日 |
2576 in 算法
8KB
95 行
sorted_rotated
假设你有一个排序后旋转的数字列表,它将在O(logN)
时间内找到你搜索的数字。
如果列表没有旋转,或者有重复项,该软件包不会失败。在这种情况下,它将遍历列表两次,导致一些性能下降。但是,如果列表没有排序(升序),它肯定会失败。
该方法很简单:执行二分搜索以找到枢轴,然后缩小二分搜索的范围以找到所需的数字。如果没有枢轴,它将在列表上再次执行二分搜索。
在两种情况下,它都返回一个Option
类型,要么是找到的数字的索引,要么是None
。因此,你必须显式设置match
分支以提取值。
快速入门
fn main() {
let list: Vec<i32> = vec![5, 6, 1, 2, 3, 4];
// Or an array can be used as well:
let list: [i32; 6] = [5, 6, 1, 2, 3, 4];
let desired: i32 = 2;
let mut element = Elements::new(list, desired);
match element.find_pivot().find_desired().result() {
Some(idx) => println!("index: {}", idx),
None => println!("Not found"),
}
}