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
相关产品推荐
相关产品推荐

