总行驶距离

134 阅读2分钟

🎈 算法并不一定都是很难的题目,也有很多只是一些代码技巧,多进行一些算法题目的练习,可以帮助我们开阔解题思路,提升我们的逻辑思维能力,也可以将一些算法思维结合到业务代码的编写思考中。简而言之,平时进行的算法习题练习带给我们的好处一定是不少的,所以让我们一起来养成算法练习的习惯。今天练习的题目是一道比较简单的题目 ->总行驶距离

问题描述

卡车有两个油箱。给你两个整数,mainTank 表示主油箱中的燃料(以升为单位),additionalTank 表示副油箱中的燃料(以升为单位)。

该卡车每耗费 1 升燃料都可以行驶 10 km。每当主油箱使用了 5 升燃料时,如果副油箱至少有 1 升燃料,则会将 1 升燃料从副油箱转移到主油箱。

返回卡车可以行驶的最大距离。

注意:从副油箱向主油箱注入燃料不是连续行为。这一事件会在每消耗 5 升燃料时突然且立即发生。

示例 1:

输入: mainTank = 5, additionalTank = 10
输出: 60
解释:
在用掉 5 升燃料后,主油箱中燃料还剩下 (5 - 5 + 1) = 1 升,行驶距离为 50km 。
在用掉剩下的 1 升燃料后,没有新的燃料注入到主油箱中,主油箱变为空。
总行驶距离为 60km 。

示例 2:

输入: mainTank = 1, additionalTank = 2
输出: 10
解释:
在用掉 1 升燃料后,主油箱变为空。
总行驶距离为 10km 。

提示:

  • 1 <= mainTank, additionalTank <= 100

思路分析

首先我们应该要先理解一下题目意思,题目会给我们两个整数mainTank,additionalTank,mainTank 表示主油箱中的燃料(以升为单位),additionalTank 表示副油箱中的燃料(以升为单位)。卡车每耗费 1 升燃料都可以行驶 10 km。每当主油箱使用了 5 升燃料时,如果副油箱至少有 1 升燃料,则会将 1 升燃料从副油箱转移到主油箱。我们需要计算当前卡车可以行驶的最大距离。

理解了题目的意思之后,我们便可以开始来进行解题了,题目很简单,就是卡车行驶的时候不会直接使用副油箱中的燃料,副油箱的燃料转移到主油箱之后才可以被卡车使用,而且是主油箱每消耗5升后才会从副油箱向主油箱注入1升燃料。我们可以直接按照题目描述模拟卡车行驶燃油情况即可:

  • 1、主油箱燃料大于等于5升

消耗5升主油箱燃料,行程添加 5 * 10km,如果副油箱中的燃料还有剩余,我们可以从副油箱中转移1升到主油箱中。

mainTank -= 5;
if(additionalTank > 0){
    additionalTank--;
    mainTank++;
}
res += 5 * 10;
  • 2、主油箱燃料小于5升

直接把主油箱中剩下的燃料全部消耗完,且卡车无法继续行驶。

res += mainTank * 10;

AC 代码

完整 AC 代码如下:

/**
 * @param {number} mainTank
 * @param {number} additionalTank
 * @return {number}
 */
 var distanceTraveled = function(mainTank, additionalTank) {
    let res = 0;
    while(mainTank > 0){
        if(mainTank >= 5){
            mainTank -= 5;
            if(additionalTank > 0){
                additionalTank--;
                mainTank++;
            }
            res += 5 * 10;
        }else{
            res += mainTank * 10;
            break;
        }
    }
    return res;
};

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,在此谢谢大家的支持,我们下文再见 🙌。