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

子数组求和多查询场景代码适配问题求助

适配多查询场景的解决方案及代码优化

原代码存在的问题

你的当前代码只适配了单个查询的场景,同时还有几个逻辑问题需要修正:

  • 仅取了查询中a、b对应的两个元素,而非a到b区间内的所有元素
  • 使用queries[0].pop()会直接修改原始查询数组,产生不必要的副作用
  • 无论区间内有多少个0,只额外加一次c,不符合题目"每出现一个0就加c"的要求
  • 未处理多查询(数组的数组)的遍历逻辑

修正后的完整代码

function findSum(numbers, queries) {
  // 封装单个查询的处理逻辑
  const calculateSingleQuery = (query) => {
    // 解构查询的三个参数:起始索引a、结束索引b、数值c
    const [a, b, c] = query;
    // 转换为数组的0-based索引(题目中的索引是1-based)
    const startIdx = a - 1;
    const endIdx = b - 1;

    let totalSum = 0;
    let zeroCount = 0;

    // 遍历区间内的所有元素,累加和并统计0的数量
    for (let i = startIdx; i <= endIdx; i++) {
      const currentNum = numbers[i];
      totalSum += currentNum;
      if (currentNum === 0) {
        zeroCount++;
      }
    }

    // 加上每个0对应的c值
    totalSum += zeroCount * c;
    return totalSum;
  };

  // 判断查询类型:单个查询直接返回结果,多查询返回结果数组
  if (!Array.isArray(queries[0])) {
    return calculateSingleQuery(queries);
  }

  return queries.map(calculateSingleQuery);
}

代码说明

  1. 单个查询处理:用calculateSingleQuery函数封装单个查询的逻辑,避免重复代码
  2. 索引转换:将题目中的1-based索引转换为JavaScript数组的0-based索引,确保区间遍历正确
  3. 区间遍历:通过for循环遍历从startIdx到endIdx的所有元素,准确计算区间和与0的数量
  4. 多查询适配:判断查询参数是否为数组的数组,若是则用map遍历所有查询,返回对应结果数组
  5. 无副作用:避免修改原始输入数组,保证数据安全性

测试示例

  • 单个查询:findSum([4,6,0,10], [1,3,20]) 返回 4+6+0 + 1*20 = 30
  • 多查询:findSum([4,6,0,10], [[2,2,20], [1,2,10]]) 返回 [6 + 0*20, 4+6 +0*10] = [6, 10]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:32:20