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

AlmostIncreasingSequence算法特殊失败用例最小修改方案咨询

AlmostIncreasingSequence 实现问题排查与修复

现有代码的核心逻辑缺陷

  • 你当前的实现仅统计相邻递减对的数量和重复元素总数,但是忽略了一个核心场景:单次相邻递减可能同时影响前后两组元素的递增性,也就是出现递减时,无论删除前一个元素还是后一个元素,都可能产生新的递减对。
    你给出的测试用例[40, 50, 60, 10, 20, 30]就是典型情况:

代码统计到的递减对只有60→10这1组,所以判定返回true,但实际上删除60后会出现50→10的新递减对,删除10后会出现60→20的新递减对,无法通过删除1个元素满足要求,正确返回值应为false。
另外你代码中的重复元素统计逻辑也有冗余问题:重复元素本身就会被相邻比较的逻辑统计为arr[i] <= arr[i-1],不需要单独判断,反而可能导致重复计数。

最小改动修复方案

只需要在统计到递减对时,额外判断一次删除操作是否会引发新的递减即可,不需要重构整体逻辑:

bool almostIncreasingSequence(int[] arr) 
{
    int removed = 0;
    if(arr.Length <= 2) return true;
    for(int i = 1; i < arr.Length ; i++)
    {
        if(arr[i] <= arr[i-1]) 
        {
            removed++;
            // 新增判断:删除任意元素都无法解决递减,直接返回false
            if(i > 1 && i < arr.Length -1 && arr[i] <= arr[i-2] && arr[i+1] <= arr[i-1])
            {
                return false;
            }
            // 最多删1个,超过直接返回
            if(removed > 1) return false;
        }
    }
    return removed <= 1;
}

改动说明

  • 移除了冗余的重复元素统计逻辑,相邻比较会自然覆盖重复场景
  • 出现递减对时增加边界判断:如果当前元素比前前个小,同时后一个元素比前一个小,说明无论删哪个都无法解决问题,直接返回false
  • 提前终止:删除次数超过1时直接返回,不需要遍历完整个数组

测试用例验证

对于[40, 50, 60, 10, 20, 30],遍历到i=3(元素10)时:

  • 满足arr[3] <= arr[2],removed变为1
  • 满足i>1 && i < arr.Length-1,同时arr[3] <= arr[1](10<=50)且arr[4] <= arr[2](20<=60),直接返回false,符合预期。

内容的提问来源于stack exchange,提问作者João Gabriel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:45:02