机智的外卖员

系列文章目录


前言

本人最近再练习算法,所以会发布一些解题思路,希望大家多指教

一、题目描述?

外卖员每天在大厦中送外卖,大厦共有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层

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值