8.23 - hard - 99

517. Super Washing Machines
这题挺诡异的,不用到什么数据结构,用到一些数学想法。其中一种解法是先保证访问过的所有machine都处于平衡状态,而达到这个平衡状态需要加入衣服或者移出衣服。如果需要移出n件衣服,那么就是直接当前的machine要move n次,如果要加入衣服,那么下一个machine要move n次,因为之前的machine是全部都平衡的。

class Solution(object):
    def findMinMoves(self, machines):
        """
        :type machines: List[int]
        :rtype: int
        """
        if sum(machines) % len(machines) == 0:
            target = sum(machines) / len(machines)
        else:
            return -1
        
        move = [0]*len(machines)
        result = 0
        for i in range(len(machines)-1):
            if machines[i] > target:
                move[i] += machines[i] - target
                machines[i + 1] += machines[i] - target
                machines[i] = target;
                result = max(result, move[i])
            else:
                move[i+1] = target - machines[i]
                machines[i + 1] -= target - machines[i]
                machines[i] = target
                result = max(result, move[i+1])
        
        return result

你可能感兴趣的:(8.23 - hard - 99)