编程之美 set 14 小飞的电梯调度算法
题目
电梯每次上升只停一次, 求问电梯停在哪一楼能够保证乘坐电梯的所有乘客爬楼层的层数之和最小
思路
假设电梯的层数是 m, 乘客人数是 n
1. 枚举, 时间复杂度是 o(mn)
2. 滚动解法. 先对 n 名乘客排序, nlogn 然后移动游标, 时间复杂度为 o(nlogn)
假设电梯的层数是 n, 要去第 i 层的乘客数目为 tot[i]
1. 假设在第 i 层停时, 有 X 人向上爬, Z 人不用爬, Y 人向下走, 需要走的步数之和为 F, 在这个前提下, 电梯在 i+1 层停靠. 那么 F' = F+X+Z-Y. X = X+Z, Y = Y-TOT[i+1]
在这种数据结构下, 时间复杂度将为 o(n)