carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode896:单调数列(monotonic-array) #159

Open carloscn opened 1 year ago

carloscn commented 1 year ago

题目描述

如果数组是单调递增或单调递减的,那么它是 单调 的。

如果对于所有 i <= j,nums[i] <= nums[j],那么数组 nums 是单调递增的。 如果对于所有 i <= j,nums[i]> = nums[j],那么数组 nums 是单调递减的。

当给定的数组 nums 是单调数组时返回 true,否则返回 false。

示例 1:

输入:nums = [1,2,2,3] 输出:true 示例 2:

输入:nums = [6,5,4,4] 输出:true 示例 3:

输入:nums = [1,3,2] 输出:false  

提示:

1 <= nums.length <= 105 -105 <= nums[i] <= 105

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/monotonic-array

carloscn commented 1 year ago

问题分析

  1. 先比较0和1的值确定方向bool is_raise = a[1] - a[0] > 0
  2. 遍历数组,和is_raise比较,如果 (a[i+1] - a[i] > 0) != is_raise { return false}, i 从1开始

fn is_monotonic(nums: Vec<i32>) -> bool
{
    if nums.len() < 2 {
        return false;
    }

    let mut ret:bool;
    let mut last_ret:bool = (nums[1] - nums[0]) >= 0;

    for i in 1..(nums.len() - 1) {
        ret = nums[i + 1] - nums[i] >= 0;
        if last_ret != ret {
            return false;
        }
        last_ret = ret;
    }

    return true;
}
carloscn commented 1 year ago

code

https://github.com/carloscn/structstudy/commit/369f004a95476b1b08c44a544968b30ca72312f1 https://review.gerrithub.io/c/carloscn/structstudy/+/551375