如何修改列表元素使其成为单调递减序列?
列表元素调整实现方案
需求明确
遍历数字列表,从左到右检查每个相邻元素:若后一个元素大于前一个,则将后一个元素调整为与前一个元素相同的数值。调整结果需符合以下示例:
- 示例1:输入
first = [100, 110, 60],输出ans = [100, 100, 60] - 示例2:输入
arr = [60,50,60],输出ans = [60, 50, 50] - 示例3:输入
arr = [20, 100, 150],输出ans = [20, 20, 20]
正确实现思路
核心是从左到右依次迭代,维护当前基准值:
- 初始化结果列表,保留原列表第一个元素作为初始基准
- 从第二个元素开始,每个元素与结果列表的最后一个元素(已调整完成的前一个值)比较:若当前元素更大,则替换为基准值;否则保留原数值
代码实现
def adjust_list(arr): if not arr: # 处理空列表边界情况 return [] ans = [arr[0]] for num in arr[1:]: if num > ans[-1]: ans.append(ans[-1]) else: ans.append(num) return ans # 测试示例 print(adjust_list([100, 110, 60])) # 输出 [100, 100, 60] print(adjust_list([60,50,60])) # 输出 [60, 50, 50] print(adjust_list([20, 100, 150])) # 输出 [20, 20, 20]
原代码问题分析
你提供的代码存在以下问题:
- 重复判断同一条件三次,逻辑冗余
- 变量名混乱:使用了
arr却出现未定义的a - 逻辑错误:每次判断后追加不同内容,未按需求统一替换为前一个元素值,最终会生成长度不符合预期的结果列表
内容的提问来源于stack exchange,提问作者Proger228
相关产品推荐
相关产品推荐

