Car Fueling Problem JavaScript解法优化及输入处理精简咨询
Car Fueling Problem 定义
你需要前往距离家乡城市𝑑英里外的另一座城市,车辆满油最多可行驶𝑚英里,出发时油箱为满油状态。沿途设有若干加油站,距家的距离分别为stop1、stop2……stopN,求最少需要加油多少次?
示例1
输入:
950 400 4 200 375 550 750输出:
2
两座城市相距950英里,车辆满油最多行驶400英里。仅需在375和750两个站点加油即可,这是最少加油次数:仅加1次油最多只能行驶800英里,无法抵达目的地。
示例2
输入:
10 3 4 1 2 5 9输出:
-1
无法到达位于9英里处的加油站,因为与上一个加油站的距离超过了车辆满油续航上限。
需求说明
现有代码可正常解决该问题,但终端输入读取并传入findMinFuelStops函数的部分逻辑冗余,希望用更少的代码实现相同效果,且输入处理思路可复用到其他算法实现中。
优化实现
核心优化思路
抛弃逐行判断输入类型的复杂逻辑,采用「统一缓存所有输入行→输入读取完成后一次性解析参数」的通用模式,该模式可直接复用到所有需要读取终端多行输入的算法题场景。同时对算法逻辑做了精简,去掉冗余判断,提升可读性。
完整代码
const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, terminal: false }); const inputLines = []; // 逐行缓存输入 rl.on("line", line => inputLines.push(line.trim())); // 所有输入读取完成后统一处理 rl.on("close", () => { const distanceDestination = Number(inputLines[0]); const carCap = Number(inputLines[1]); const availableStops = Number(inputLines[2]); const fuelArr = inputLines[3].split(" ").map(Number); console.log(findMinFuelStops(distanceDestination, carCap, availableStops, fuelArr)); }); function findMinFuelStops(distanceDestination, carCap, availableStops, fuelArr) { let countStops = 0; let currentPos = 0; const fullFuel = carCap; // 满油直接到终点不需要加油 if (fullFuel >= distanceDestination) return 0; // 把终点加入站点列表,避免单独判断终点的冗余逻辑 const allStops = [...fuelArr, distanceDestination]; for (let i = 0; i < allStops.length; i++) { const dist = allStops[i] - currentPos; // 相邻站点距离超过满油续航,直接判定不可达 if (dist > fullFuel) return -1; // 当前油量不够到下一站,在上一个站点加满 if (dist > carCap) { countStops++; carCap = fullFuel; } carCap -= dist; currentPos = allStops[i]; } return countStops; }
内容的提问来源于stack exchange,提问作者Cihat Şaman
相关产品推荐
相关产品推荐

