LeetCode : Rotate Function

来源:互联网 发布:php 洗衣管理软件 编辑:程序博客网 时间:2024/04/27 16:19

首先尝试直接计算,记录最大值,会超时。

思路

通过观察

f(0)=0×A[0]+1×A[1]+2×A[2]+3×A[3].
f(1)=1×A[0]+2×A[1]+3×A[2]+0×A[3].
f(2)=2×A[0]+3×A[1]+0×A[2]+1×A[3].
f(3)=3×A[0]+0×A[1]+1×A[2]+2×A[3].

发现function之间有递归关系

f(1)=f(0)+sum4×A[3].
f(2)=f(1)+sum4×A[2].
f(3)=f(2)+sum4×A[1].

Solution

int maxRotateFunction(vector<int>& A){    int k = A.size();    int sum = 0; // A中所有元素和    int res = 0; // 结果:记录最大值    int temp = 0; // function(i)    for(int i = 0; i < k; i++)    {        sum += A[i];        temp += i * A[i];    }    res = temp;    for(int i = 1; i < k; i++)    {        temp = temp + sum - k * A[k - i % k];        if(temp > res)            res = temp;    }    return res;}

Tip

前面加一些判断条件,明显减少了最后判定的时间。

if(k == 1)    return 0;else if(k == 2)    return max(A[0], A[1]);
0 0
原创粉丝点击