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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:27:04