rust 寻找峰值实现(大厂面试题 )

发布时间:2024年01月16日

大家好,我是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

好了,本期的第一篇文章结束,你要好好加油哦~哈哈,有问题联系我吧~

下一篇,模块编写与使用 已经在路上了~

文章来源:https://blog.csdn.net/liulcsy/article/details/135620378
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。