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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:15:35