网站主办者和所有者区别,山西制作网站,通过百度指数不能判断出,北京高端网站开发1. 题目
给定一个长度为 n 的整数数组 A 。
假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组#xff0c;我们定义 A 的“旋转函数” F 为#xff1a;
F(k) 0 * Bk[0] 1 * Bk[1] ... (n-1) * Bk[n-1]。计算F(0), F(1), …, F(n-1)中的最大值。
注意: 可以认为 n 的值小…1. 题目
给定一个长度为 n 的整数数组 A 。
假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组我们定义 A 的“旋转函数” F 为
F(k) 0 * Bk[0] 1 * Bk[1] ... (n-1) * Bk[n-1]。计算F(0), F(1), …, F(n-1)中的最大值。
注意: 可以认为 n 的值小于 105。
示例:
A [4, 3, 2, 6]
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 。来源力扣LeetCode 链接https://leetcode-cn.com/problems/rotate-function 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。
2. 高中数学解题
F(0) 可算出 所有 A[i] 的总和 为 S F(i1)−F(i)S−n∗A[n−i−i]F(i1)-F(i) S-n*A[n-i-i]F(i1)−F(i)S−n∗A[n−i−i] 右边的差值 diff 上一次的 diff 迭代到下一次需要 n∗A[n−i−1]−n∗A[n−i−2]n*A[n-i-1]-n*A[n-i-2]n∗A[n−i−1]−n∗A[n−i−2]
class Solution {
public:int maxRotateFunction(vectorint A) {int F_i 0, diff 0, ans INT_MIN, n A.size();for(int i 0, k 0; i n; i,k){F_i k*A[i];if(i ! A.size()-1)diff A[i];elsediff - i*A[i];}ans F_i; //f(0)for(int i 1; i n; i){F_i diff;//f(i1) f(i)diffif(F_i ans)ans F_i;//取最大diff n*(A[n-i]-A[n-i-1]);//diff 差值更新}return ans;}
};