电梯调度问题——《编程之美》Java实现

来自《编程之美》
电梯调度问题:亚洲微软研究院所在的希格玛大厦一共有6部电梯。在高峰时间,每层都有人上下,电梯每层都停。实习生小飞常常会被每层都停的电梯弄的很不耐烦,于是他提出了这样一个办法:
由于楼层并不算太高,那么在繁忙的上下班时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。所有乘客从一楼上电梯,到达某层后,电梯停下来,所有乘客再从这里爬楼梯到自己的目的层。在一楼的时候,每个乘客选择自己的目的层,电梯则计算出应停的楼层。
问:电梯停在哪一层楼,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少?

思路:假设电梯现在停在第i层,i层以下的人有N1个,i层有N2个,i层以上的人有N3个,当前需要走的楼梯数为Y。当电梯再往上走一层时,i层及i层以下的人一共需要多走N1+N2步,而i层以上的人则一共少走了N3步,所以当N1+N2时,电梯应该继续往上走。
Java代码:

public class LiftProblem {
 
    public static int stopLift(int[] to) {
        if (to.length < 2) {
            return -1;
        }
        int n1 = 0, n2 = to[1], n3= 0, y = 0;
        // 计算一层及以上的人数
        for (int i = 1; i < to.length; i++) {
            n3 += to[i];
            y += (i - 1) * to[i];
        }
 
        for(int i = 1; i < to.length; i++) {
            n2 = to[i];
            n1 += to[i - 1];
            n3 = n3 - n2;
            if (n1 + n2 >= n3) {
                return i;
            }
        }
        return -1;
    }
 
 
    public static void main(String[] args) {
        int[] to = {0, 1, 2 ,3 ,5 ,6, 7};
        System.out.format("电梯应该停在第%d层。", stopLift(to));
 
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 电梯在高峰时间,每层都有人上下,电梯每层都停,在繁忙的上下班时间,每次电梯从一层往上走时,假设只允许电梯停在其中的...
    FlyElephant阅读 3,744评论 0 0
  • 一、自然通风与自然排烟 (一)自然通风方式 1.自然通风的原理 是以热压和风压作用的、不消耗机械动力的、经济的通风...
    灰丫蛋阅读 9,452评论 0 0
  • 姓名:李振华 学号:17101223418 【嵌牛导读】:电梯调度算法是一类经典问题,在操作系统的磁盘...
    大华华0504阅读 9,209评论 0 1
  • 50道经典Java编程练习题,将数学思维运用到编程中来。抱歉哈找不到文章的原贴了,有冒犯的麻烦知会声哈~ 1.指数...
    OSET我要编程阅读 11,969评论 0 9
  • 我们要孩子是为了什么?传宗接代?养儿防老?刚刚在书里看到一个很感动的答案说:“为了参与一个生命的成长,参与意味着付...
    Djoker阅读 3,342评论 0 0

友情链接更多精彩内容