leetcode之Rotate Function

本题讲的是讲一个列表从末尾的数字开始翻转,然后一次求出相应的结果。一开始很容易想到的最简单的做法就是把列表列出来,然后用功能一次求一遍,然后就发现超时了。
要想解决这个超时的问题,就要仔细的观察它的规律,找到相应的规律才好解决问题。通过仔细观察发现,每一次的变化,就是把最后的一个数字给挪到最前面。而在计算里面,则是除了最后一个元素外,所有的其他元素都是之前的多算了一遍。找到了这个规律之后,剩下的就很简单了。每次的计算是原来的结果加上除了上个list的最后一个元素的其他元素之和,然后再减去n-1个最后一个元素。合起来就是加上A列表的和,减去n个最后一个元素,题目就简单了。

class Solution(object):
    def maxRotateFunction(self, A):
        """
        :type A: List[int]
        :rtype: int
        """
        if A == [] or None:
            return 0
        sumofA = sum(A)
        def forsum(A):
            sumofall = 0
            for i in xrange(1, len(A)):
                sumofall += i * A[i]
            return sumofall
        listofall = [forsum(A)]
        for i in xrange(1, len(A)):
            listofall.append(listofall[i - 1] + sumofA - len(A) * A[-i])
        return max(listofall)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值