大家好,我是get_local_info作者带剑书生,这里用一篇文章讲解get_local_info中的一个常规功能:寻找峰值的实现,同时它也是大厂面试时常考的题目。
首先,先要了解get_local_info是什么?
get_local_info是一个获取linux系统信息的rust三方库,并提供一些常用功能,目前版本0.2.4。详细介绍地址:[我的Rust库更新]get_local_info 0.2.3-CSDN博客
首先,在你的工程目录下,执行:
cargo add get_local_info
,然后在工程中导入它
extern crate get_local_info;
接着调用它:
//find_peak_element
let nums = [1];
println!("{}", get_local_info::alg::find_peak_element(nums.to_vec()));
?好了,get_local_info中的该模块介绍完了。
下面来让我们看看它的实现。
// Copyright (c) 2023-2024 Liu Qiang <liulcsy@qq.com> In Wuhan, China
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
//I have submitted the leetcode for approval
//https://leetcode.cn/problems/find-peak-element/description/
pub fn find_peak_element(nums:Vec<i32>)-> i32 {
let mut left = 0;
let n = nums.len();
println!("n:{}",n);
let mut right = n -1;
while left <= right {
let mid = (left + right)/ 2;
println!("mid:{}",mid);
if mid + 1<n && nums[mid] < nums[mid + 1] {
left = mid + 1;
println!("left:{}",left);
}
else if (mid as isize) - 1 >= 0 && nums[mid] < nums[mid - 1]{
right = mid -1;
println!("right:{}",right);
} else {
return mid.try_into().unwrap();
}
}
return -1;
}
上述代码是实现,n是数组的长度,通过二分查找,不断折半,每一次折半后的左右区间为:nums[mid] < nums[mid + 1],表示峰值在右边,选定区间为右半部分,所以left=mid+1,否则相反,然后不断的循环,直到区间完结。
下面是我提交到力扣上的测试结果,执行通过,执行时间0ms
好了,本期的第一篇文章结束,你要好好加油哦~哈哈,有问题联系我吧~
下一篇,模块编写与使用 已经在路上了~