天天看点

编程之美--游戏之乐--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([,,,,,,])