《编程之美》第1.8节:小飞的电梯调度算法
假设楼层共有N层,电梯停在第x层,要去第i层的乘客数目总数为total[i],所爬楼梯的总数就是sum{total[i]*|i-x|},求使得这个和最小的x的值,即电梯停的楼层数。
stop1函数是O(N^2)的算法,就是假设在每层楼停下,计算此时需要爬的楼梯数,如果比最小的少,则赋值。
stop2函数时O(N)时间的算法,这里如果电梯当前层数为i,在i之前的人总的需要爬楼梯数为totalBefore,在i之后需要爬的总楼梯数时totalNum,则在i+1层时,前面需要爬的楼梯数增加了totalBefore+total[i],后面的人爬楼梯总数减少了totalNum,当然减少之后,totalNum此时应更新为totalNum-=total[i]。这样,当遍历完整个楼层以后就能够得到最优解。
stop3函数比较有意思,也是《编程之美》给出的解法:在第i层停下时,假设有N1个人在第i层以下,有N2个人在第i层