Rotate Function

这题用了一个很巧妙的RabinKarp式思维,主要在于观察每一次的rotate,真正变化的地方分两处,一处除最后一个数之外其他所有元素都加了一个本身,而最后一个元素的积全部清零,所以实际上要做的就是找出数组的和,每次rotate只要加上这个和再减去当前rotate这一轮需要被清零的的值就可以了

class Solution(object):
    def maxRotateFunction(self, A):
        """
        :type A: List[int]
        :rtype: int
        """
        if not A:
            return 0

        cumSum = sum(A)
        n = len(A)
        product = reduce(operator.add, map(lambda x, y: x * y, range(n), A))

        result = product
        for i in xrange(1, n):
            product = product + cumSum - n * A[n - i]
            result = max(result, product)
        return result

results matching ""

    No results matching ""