程式設計之美--遊戲之樂--1.8小飛的電梯排程問題
阿新 • • 發佈:2019-01-25
- 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])