You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何判断数组是否为单调数组的代码无法正常运行?

问题分析与修复

你的代码无法正确判断单调数组的原因有以下几点:

  • 错误的标记逻辑:当前代码只要发现任意一对递增元素就设inc为true,任意一对递减元素就设dec为true,但真正的单调递增数组要求全程没有递减的元素对,单调递减数组要求全程没有递增的元素对。比如数组[1,3,2]会被错误判定为true,因为它既有递增又有递减的元素对。

  • 错误的最终判断条件:代码通过dec || inc == true返回结果,这会让同时存在递增和递减步骤的数组也返回true,不符合单调数组的定义。

  • 未处理全相等数组:像[5,5,5]这样的数组,既没有递增也没有递减的元素对,inc和dec都会保持false,导致返回false,但实际上它属于单调数组(既是非递增也是非递减)。


修复后的代码

我们只需要一次遍历数组,同时跟踪数组是否可能为递增或递减:

public boolean isMonotonic() {
    boolean isIncreasing = true;
    boolean isDecreasing = true;
    
    for (int i = 0; i < values.length - 1; i++) {
        if (values[i] < values[i+1]) {
            // 出现递增,说明不可能是递减数组
            isDecreasing = false;
        } else if (values[i] > values[i+1]) {
            // 出现递减,说明不可能是递增数组
            isIncreasing = false;
        }
        // 相等的情况不改变两个标记
    }
    
    // 只要其中一个标记为true,说明数组是单调的
    return isIncreasing || isDecreasing;
}

逻辑说明:

  1. 初始化isIncreasing和isDecreasing为true,假设数组同时满足两种可能。
  2. 遍历数组时,遇到递增对就排除递减的可能,遇到递减对就排除递增的可能。
  3. 最后只要其中一个标记仍为true,就说明数组是单调的(全相等的情况两个标记都会保持true)。

内容的提问来源于stack exchange,提问作者Mohammad Alshakeralasir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:01:44