问题描述
小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; // 若发现递增,非递减
}
}
代码结构
-
头文件和命名空间:
- 代码包含了
<iostream>和<vector>头文件,并使用了std命名空间。
- 代码包含了
-
函数
solution:- 该函数接收一个
vector<int>类型的参数nums,用于判断该数组是否为单调数组。 - 使用两个布尔变量
isIncreasing和isDecreasing来分别表示数组是否单调递增和单调递减。 - 通过遍历数组,检查相邻元素的关系来更新
isIncreasing和isDecreasing的值。 - 最后返回
isIncreasing || isDecreasing,即只要数组是单调递增或单调递减,就返回true。
- 该函数接收一个
-
主函数
main:- 在
main函数中,调用了solution函数并打印结果。 - 测试了三个不同的数组,并输出结果。
- 在
代码逻辑
-
初始化:
isIncreasing和isDecreasing都被初始化为true。
-
遍历数组:
- 从第二个元素开始遍历数组,比较当前元素和前一个元素。
- 如果发现当前元素小于前一个元素,则将
isIncreasing设为false。 - 如果发现当前元素大于前一个元素,则将
isDecreasing设为false。
-
返回结果:
- 只要
isIncreasing或isDecreasing中有一个为true,就返回true,否则返回false。
- 只要