天天看點

程式設計之美--遊戲之樂--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 = 
        for i in range(,len(n_Person)):
            Y+=(i-)*n_Person[i]
            n_Person[i]+=n_Person[i-]
        print '到第i層為止,目前的人數為:'
        print n_Person
        print '第2層停止,需要走的步數:'
        print Y
        res = Y
        number = 
        '''
        N1 i層以下所有人數
        N2 第i層的人數
        N3 i層以上的人數
        '''
        for i in range(,len(n_Person)):
            N1 = n_Person[i-]
            N2 = n_Person[i]-n_Person[i-]
            N3 = n_Person[-]-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([,,,,,,])
           

繼續閱讀