深入解析单调数组的判断问题|青训营X豆包MarsCode 技术训练营

47 阅读2分钟

深入解析单调数组的判断问题

一、问题定义

给定一个整数数组 nums,我们需要判断该数组是否为单调数组。具体来说,如果数组满足以下两个条件之一,则为单调数组: 对于所有索引 i <= j,nums[i] <= nums[j],即数组单调递增。 对于所有索引 i <= j,nums[i] >= nums[j],即数组单调递减。

二、解题思路

要判断一个数组是否为单调数组,我们可以采用以下步骤: (1)初始化两个布尔变量 increasing 和 decreasing,分别表示数组是否单调递增和单调递减。初始时,两者均设为 true。 (2)遍历数组 nums,从第二个元素开始,逐个比较相邻元素的大小关系。 如果发现当前元素小于前一个元素,则将 increasing 设置为 false。 如果发现当前元素大于前一个元素,则将 decreasing 设置为 false。 (3)遍历结束后,如果 increasing 或 decreasing 中至少有一个为 true,则数组是单调的,否则不是。

三、关键代码解析

以下是对关键代码的详细解析

    bool solution(vector<int> nums) {
    bool increasing = true;  // 判断数组是否单调递增
    bool decreasing = true;  // 判断数组是否单调递减
    for (size_t i = 1; i < nums.size(); ++i) {
        if (nums[i] < nums[i - 1]) {
            increasing = false;  // 当前元素小于前一个元素,不是单调递增
        }
        if (nums[i] > nums[i - 1]) {
            decreasing = false;  // 当前元素大于前一个元素,不是单调递减
        }
    }
    return increasing || decreasing;  // 如果数组是单调递增或单调递减,则返回true
}

在这段代码中,我们通过遍历数组 nums,比较相邻元素的大小关系,来判断数组是否为单调递增或单调递减。如果遍历过程中发现违反单调递增或单调递减规则的情况,相应的布尔变量会被设置为 false。最后,根据 increasing 和 decreasing 的值来判断数组是否为单调数组。

四、总结

总而言之,本文介绍了如何判断一个数组是否为单调数组,并通过关键代码解析,使我们可以更好地理解解题思路,掌握这一问题的解决方法,有助于我们在实际应用中更好地处理与单调数组相关的问题。