如何在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
相关产品推荐
相关产品推荐

