JavaScript函数重构:基于输入整数的数组转换实现
简洁循环实现数组扣除逻辑
这问题挺有意思的,核心就是要按顺序从数组元素里扣指定的量,还不能用一堆if-else判断对吧?我给你写个简洁的循环实现,逻辑清晰还通用:
Python 实现
def transform_pie_values(pie_values, n): # 边界情况:输入0或50直接返回原数组的副本(避免修改原数组) if n in (0, 50): return pie_values.copy() # 创建原数组的副本,防止修改原数据 transformed = pie_values.copy() remaining = n # 遍历数组,依次扣除剩余量 for i in range(len(transformed)): if remaining <= 0: break # 剩余量扣完了,提前退出循环 # 计算当前元素能扣除的最大量(不能把元素扣成负数) deduct_amount = min(transformed[i], remaining) transformed[i] -= deduct_amount remaining -= deduct_amount return transformed
逻辑解释
- 保护原数组:全程用
copy()操作,避免修改传入的原始数组,防止产生意外副作用 - 循环遍历扣除:从数组第一个元素开始,每次取「当前元素值」和「剩余需要扣除的量」里的较小值来扣除,确保元素不会变成负数
- 提前终止优化:一旦剩余需要扣除的量变成0,立刻跳出循环,不用遍历完整个数组,提升效率
- 边界处理:直接判断输入为0或50时返回原数组副本,完全符合需求
测试示例
假设原始数组为 pie_values = [20, 0, 10, 20](总和50):
- 输入
5:返回[15, 0, 10, 20](从索引0扣除5) - 输入
21:返回[0, 0, 9, 20](先从索引0扣20,剩余1;索引1为0跳过,从索引2扣1) - 输入
0或50:返回原数组的副本[20, 0, 10, 20]
内容的提问来源于stack exchange,提问作者Fullhdpixel
相关产品推荐
相关产品推荐

