Leetcode Day17 1
396. 旋轉函數
給定一個長度為 n 的整數數組 nums 。
假設 arrk 是數組 nums 順時針旋轉 k 個位置后的數組,我們定義 nums 的 旋轉函數? F 為:
F(k) = 0 * arrk[0] + 1 * arrk[1] + ... + (n - 1) * arrk[n - 1]
返回 F(0), F(1), ..., F(n-1)中的最大值 。
生成的測試用例讓答案符合 32 位 整數。
?
示例 1:
輸入: nums = [4,3,2,6]
輸出: 26
解釋:
F(0) = (0 * 4) + (1 * 3) + (2 * 2) + (3 * 6) = 0 + 3 + 4 + 18 = 25
F(1) = (0 * 6) + (1 * 4) + (2 * 3) + (3 * 2) = 0 + 4 + 6 + 6 = 16
F(2) = (0 * 2) + (1 * 6) + (2 * 4) + (3 * 3) = 0 + 6 + 8 + 9 = 23
F(3) = (0 * 3) + (1 * 2) + (2 * 6) + (3 * 4) = 0 + 2 + 12 + 12 = 26
所以 F(0), F(1), F(2), F(3) 中的最大值是 F(3) = 26 。
一開始暴力求解,果然寄了,看了下題解是找規(guī)律。。

class?Solution:
????def?maxRotateFunction(self,?nums:?List[int])?->?int:
????????def?calList(nums):
????????????tmp=0
????????????for?i?in?range(len(nums)):
????????????????tmp+=nums[i]*i
????????????return?tmp
????????max1=calList(nums)
????????sum1=sum(nums)
????????res=calList(nums)
????????n=len(nums)
????????for?i?in?range(1,n,1):
????????????res=res+sum1-n*nums[n-i]
????????????max1=max(max1,res)
????????return?max1

優(yōu)化了一下,nums[n-i]可以用nums.pop(),效率高很多

