🎈 算法并不一定都是很难的题目,也有很多只是一些代码技巧,多进行一些算法题目的练习,可以帮助我们开阔解题思路,提升我们的逻辑思维能力,也可以将一些算法思维结合到业务代码的编写思考中。简而言之,平时进行的算法习题练习带给我们的好处一定是不少的,所以让我们一起来养成算法练习的习惯。今天练习的题目是一道比较简单的题目 ->总行驶距离
问题描述
卡车有两个油箱。给你两个整数,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,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,在此谢谢大家的支持,我们下文再见 🙌。