系列文章目录
前言
本人最近再练习算法,所以会发布一些解题思路,希望大家多指教
一、题目描述?
外卖员每天在大厦中送外卖,大厦共有L层(0<L<=10^5),当他处于第N层楼时,可以每分钟通过步行梯向上达到N+1层,或向下达到N-1层,或者乘坐电梯达到2*N层。给定他所处位置N,以及外卖配送的目的楼层M,计算他送达的最短时间。
二、输入描述
当前所处楼层N和外卖配送的目的楼层M。
三、输出描述
送达的最短时间
四、java代码
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] split = scanner.nextLine().split(" ");
int n = Integer.parseInt(split[0]);//所处楼层
int m = Integer.parseInt(split[1]);//目标楼层
System.out.println(sendWaimaiMinTime(n,m));
}
private static int sendWaimaiMinTime(int n, int m) {
int time = 0;
if(n < m){
//1.先计算楼层差距
int sub = m - n;
int div = Math.floorDiv(sub, n);
//标记当前楼层所在位置
int curN = n;
//判断是否需要乘坐电梯
if(div >= 1){
//计算坐完电梯后,所处楼层位置
curN += n*div;
//乘坐电梯需要的时间
time += div;
}
//计算当前楼层和目标楼层的距离
int abs = m - curN;
if(abs < (float)n/2){
//直接通过楼梯到达为最优选择
time += abs;
} else {
//先乘坐一分钟电梯,然后再通过楼梯向下到达目标楼层
time += curN + n - m + 1;
}
}else {
//根据题意,目标楼层小于当前楼层,只能走楼梯
time = n - m;
}
return time;
}
五、测试用例
输入:7 38
输出:
说明:当前楼层 7 + 4分钟电梯( 4*7 =28) + 3分钟楼梯 = 38层