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

数组严格递增分段修改最优算法:现有Python代码错误修正求助

最少操作次数将数组转换为严格递增数组(区间加操作)

你的代码返回20而非正确值2,原因是误计算了总增量之和,而不是我们需要的最少操作次数。以下是正确的解法:

核心思路

每次操作可对连续区间加任意正整数,要最小化操作次数,我们需要构造一个非递减的增量数组(非递减的增量可通过多次区间加操作实现,每次增量上升对应一次新操作)。

要保证修改后的数组严格递增,需满足:
A[i] + add[i] < A[i+1] + add[i+1]
整理得每个位置的增量约束:
add[i+1] >= add[i] + (A[i] - A[i+1]) + 1

同时,为了用最少操作次数,我们让增量数组保持非递减(即add[i+1] >= add[i]),这样每次增量上升时,就需要新增一次操作。

正确代码

def min_operations(A):
    n = len(A)
    if n <= 1:
        return 0
    operation_count = 0
    prev_add = 0
    for i in range(1, n):
        # 计算满足严格递增所需的最小增量
        required = prev_add + (A[i-1] - A[i]) + 1
        # 保持增量数组非递减,避免不必要的操作
        current_add = max(required, prev_add)
        # 增量上升时,新增一次操作
        if current_add > prev_add:
            operation_count += 1
        prev_add = current_add
    return operation_count

代码验证

  • 输入A=[4,2,4,1,3,5]:
    遍历过程中,增量从0→3(操作+1),3→7(操作+1),后续增量保持7不变,最终返回2,符合预期。
  • 输入A=[3,5,7,7]:
    仅最后一个位置增量从0→1(操作+1),返回1,符合预期。
  • 输入A=[1,5,6,10]:
    所有增量保持0,返回0,符合预期。

内容的提问来源于stack exchange,提问作者Sushant Patekar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:57:02