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

如何在for循环中实现交替加减?CodeWars公交乘客数Kata求解

解决CodeWars「Number of people in the Bus」问题:交替加减实现与操作名称

一、修改代码实现交替加减

基于你已经完成的数组扁平化逻辑,只需要调整第二个循环的运算规则:扁平化后的数组里,偶数索引(0、2、4...)的元素是上客数,需要累加;奇数索引(1、3、5...)的元素是下客数,需要累减。

修改后的完整代码:

var number = function (busStops) {
  let newBusStops = [];
  for (let i = 0; i < busStops.length; i++) {
    newBusStops = newBusStops.concat(busStops[i]);
  }
  let passengers = 0;
  for (let i = 0; i < newBusStops.length; i++) {
    // 偶数索引加,奇数索引减
    passengers += i % 2 === 0 ? newBusStops[i] : -newBusStops[i];
  }
  return passengers;
};
console.log(number([[10,0],[3,5],[5,8]])); // 输出 5
console.log(number([[3,0],[9,1],[4,10],[12,2],[6,1],[7,10]])); // 输出 17

另外给你补充一个更高效的写法(无需扁平化数组):直接遍历每个站点的上下客数组对,每个站点的乘客变化量是「上客数 - 下客数」,累加所有变化量即可:

var number = function (busStops) {
  let passengers = 0;
  for (let [on, off] of busStops) {
    passengers += on - off;
  }
  return passengers;
};

二、该操作的名称

这种按序列位置交替执行加减的求和操作,通常称为交替加减求和,也可以描述为基于索引奇偶性的条件累加运算。核心是根据元素在序列中的索引奇偶性,决定使用加法还是减法参与累加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:15:34