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

LeetCode 1526题解法超时求助:递归与迭代实现未全过

LeetCode 1526题超时问题求助

我正在解决LeetCode困难题No.1526(构造目标数组的子数组最少增加次数),但提交的代码多次因超时被拒绝。

No.1526问题简介

问题描述截图

下图是我的解题思路,抱歉分辨率不佳。
解题思路截图

我认为这个思路可行,因此分别用递归和迭代两种方式实现了代码:

递归实现

target = [1, 2, 3, 2, 1]
score = 0

def minSubtract(target):
  global score
  if list(set(target)) == set([0]):
    return

  print(f"current arryay is {target}")
  localMin = min(target)
  score += localMin

  newTargets = [ele - localMin for ele in target]


  idx = 0
  Arr = []

  while idx < len(newTargets):
    print(idx)
    if newTargets[idx] != 0: # if nonzero element
      
      subArr = [newTargets[idx]]
      idx_ = idx + 1
      
      while True:

        if (idx_ >= len(newTargets) or (newTargets[idx_] == 0) ):
          idx = idx_
          Arr.append(subArr)
          break
        subArr.append(newTargets[idx_])
        idx_ += 1

    else:
      idx += 1

  print(f"subarrays are {Arr}")

  for subArray in Arr:
    minSubtract(subArray)
  
minSubtract(target)
score

迭代实现

score = 0
stack = [target]


while stack:
  curArr = stack.pop()
  localMin = min(curArr)

  if localMin == 0:
    pass

  score += localMin
  SubtractedArr = [ele - localMin for ele in curArr]


  idx = 0
  Arrs = []
  while idx < len(SubtractedArr):

    if SubtractedArr[idx] != 0: # if nonzero element
      
      subArr = [SubtractedArr[idx]]
      idx_ = idx + 1
      
      while True:

        if (idx_ >= len(SubtractedArr) or (SubtractedArr[idx_] == 0) ):
          idx = idx_
          Arrs.append(subArr)
          break
        subArr.append(SubtractedArr[idx_])
        idx_ += 1

    else:
      idx += 1

  for newArr in Arrs:
    stack.append(newArr)

score

然而,两种实现均通过了126/128个测试用例,但存在运行时超时问题。我想知道是什么导致代码速度缓慢,或者我的思路本身是否存在缺陷。


内容的提问来源于stack exchange,提问作者Junyeong Ahn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:06:26