1. 程式人生 > >程式設計之美--遊戲之樂--1.8小飛的電梯排程問題

程式設計之美--遊戲之樂--1.8小飛的電梯排程問題

  • 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])