美文网首页
荣耀算法面试题-送伞最小时间

荣耀算法面试题-送伞最小时间

作者: 老铁码农 | 来源:发表于2021-12-01 17:32 被阅读0次

    面试荣耀,一个算法题,很简单,当时竟然没给写出来。ε=(´ο`*)))唉,大意了,大意了,没有闪。

    题目

    部门聚餐,下大雨,要将所有人从食堂运到办公室。
    现在由大伞和小伞,小伞一次撑2个人,大伞一次撑3个人
    在最开始时食堂的人有一把小伞,办公室里有n把小伞,m把大伞。
    从办公室到食堂的往返时间为2小伞,去1h,回1h。
    每个人一次只能带一把伞。
    求所有人回到办公室的最短时间。
    输入:
    一个数字T,T组数据
    每组为c n m,代表人数,小伞数,大伞数
    测试用例:
    2
    1 1 1
    3 1 1

    c=11 n=1 m=2 标答为9
    我的答案是5

    public static int sendUmbrella(int c, int n, int m) {
    
            int leftNum = 0; //已经离开的人数,到达办公室人数。
            int smallUmbrella = 1; //食堂里有的小伞数量
            int bigUmbrella = 0; //食堂里有的小伞数量
            int costHour = 0;
            while (true) {
                leftNum += smallUmbrella * 2 + bigUmbrella * 3;
                costHour++;
                if (leftNum >= c) {
                    break;
                }
                if ( (leftNum * 2) <= m){//大伞很充足,所有的人都带不完,看有多少人,就带多少伞
                    bigUmbrella = leftNum *2;
                }else{// 大伞不足,依据有多少大伞就带多少
                    bigUmbrella = m;
                    if ((leftNum * 2) <= n+m+1){//小伞很充足,所有的人都带不完,看有多少人就带多少伞
                        smallUmbrella = (leftNum * 2 ) - m;
                    }else{//小伞也不足,依据有多少伞就带多少
                        smallUmbrella = n+1;
                    }
                }
                costHour++;
                leftNum = leftNum - (bigUmbrella+smallUmbrella)/2;
            }
            return costHour;
        }
    

    相关文章

      网友评论

          本文标题:荣耀算法面试题-送伞最小时间

          本文链接:https://www.haomeiwen.com/subject/rmosxrtx.html