您的位置:首页 > 编程语言

编程之美--游戏之乐--1.8小飞的电梯调度问题

2016-11-07 11:32 169 查看
o(n)解法

利用Y来存储以当前i层为基准,所有员工需要走的楼层

N1 i层以下所有人数

N2 第i层的人数

N3 i层以上的人数

可以得出:

Y = Y(i-1需要走的楼层)+N1-N2-N3

求解即可

#coding=utf-8
#author='HL'
class Solution():
def solve(self,n_Person):
'''
:param n_Person:type--list,每层电梯停留人数
:return:
'''
Y = 0
for i in range(3,len(n_Person)):
Y+=(i-2)*n_Person[i]
n_Person[i]+=n_Person[i-1]
print '到第i层为止,目前的人数为:'
print n_Person
print '第2层停止,需要走的步数:'
print Y
res = Y
number = 2
'''
N1 i层以下所有人数
N2 第i层的人数
N3 i层以上的人数
'''
for i in range(3,len(n_Person)):
N1 = n_Person[i-1]
N2 = n_Person[i]-n_Person[i-1]
N3 = n_Person[-1]-n_Person[i]
Y = Y+N1-N2-N3
if Y<res:
res = Y
number = i
else:
break
return res,number

zz = Solution()
print zz.solve([0,0,1,2,3,4,5])
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息