判断数组是否单调 | 豆包MarsCode AI刷题

135 阅读2分钟

问题描述

小S最近在研究一些数组的性质,她发现有一种非常有趣的数组被称为 单调数组。如果一个数组是单调递增或单调递减的,那么它就是单调的。

  • 当对于所有索引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, 4, 5]
输出:False

#include <vector>
using namespace std;

bool solution(vector<int> nums) {
    // 判断数组是否单调递增
    bool isIncreasing = true;
    // 判断数组是否单调递减
    bool isDecreasing = true;

    for (int i = 1; i < nums.size(); ++i) {
        if (nums[i] < nums[i - 1]) {
            isIncreasing = false; // 若发现递减,非递增
        }
        if (nums[i] > nums[i - 1]) {
            isDecreasing = false; // 若发现递增,非递减
        }
    }

    return isIncreasing || isDecreasing;
}

int main() {
    bool result1 = solution(vector<int>{1, 2, 2, 3});
    bool result2 = solution(vector<int>{6, 5, 4, 4});
    bool result3 = solution(vector<int>{1, 3, 2, 4, 5});
    
    cout << (result1 == true) << endl;  // 输出 1(即 true)
    cout << (result2 == true) << endl;  // 输出 1(即 true)
    cout << (result3 == false) << endl; // 输出 1(即 true)
}

// 判断数组是否单调递增
bool isIncreasing = true;
// 判断数组是否单调递减
bool isDecreasing = true;
for (int i = 1; i < nums.size(); ++i) {
        if (nums[i] < nums[i - 1]) {
            isIncreasing = false; // 若发现递减,非递增
        }
        if (nums[i] > nums[i - 1]) {
            isDecreasing = false; // 若发现递增,非递减
        }
    }

代码结构

  1. 头文件和命名空间

    • 代码包含了 <iostream> 和 <vector> 头文件,并使用了 std 命名空间。
  2. 函数 solution

    • 该函数接收一个 vector<int> 类型的参数 nums,用于判断该数组是否为单调数组。
    • 使用两个布尔变量 isIncreasing 和 isDecreasing 来分别表示数组是否单调递增和单调递减。
    • 通过遍历数组,检查相邻元素的关系来更新 isIncreasing 和 isDecreasing 的值。
    • 最后返回 isIncreasing || isDecreasing,即只要数组是单调递增或单调递减,就返回 true
  3. 主函数 main

    • 在 main 函数中,调用了 solution 函数并打印结果。
    • 测试了三个不同的数组,并输出结果。

代码逻辑

  • 初始化

    • isIncreasing 和 isDecreasing 都被初始化为 true
  • 遍历数组

    • 从第二个元素开始遍历数组,比较当前元素和前一个元素。
    • 如果发现当前元素小于前一个元素,则将 isIncreasing 设为 false
    • 如果发现当前元素大于前一个元素,则将 isDecreasing 设为 false
  • 返回结果

    • 只要 isIncreasing 或 isDecreasing 中有一个为 true,就返回 true,否则返回 false