类别:数组 数组的旋转
题目:
法一:
想法:
循环算出所有可能的f值,在过程中取最大值。
代码:
class Solution {
public int maxRotateFunction(int[] A) {
int ans = 0;
int[] temp = new int[A.length];
for (int i = 0; i < A.length; ++i) {
temp[i] = i * A[i];
ans += temp[i];
}
for (int i = 1; i < A.length; ++i) {
int sum = 0;
for (int j = A.length - 1; j > 0; --j) {
int index = j - i;
if (index < 0) {
index += A.length;
}
temp[j] = temp[j - 1] + A[index];
sum += temp[j];
}
if (sum > ans) {
ans = sum;
}
}
return ans;
}
}
结果:超时
法二:
想法:
代码:
class Solution {
public int maxRotateFunction(int[] nums) {
int n = nums.length;
int sumA = 0; //保存数组A所有元素的和
int sumF = 0; //函数f的值
int i;
for (i = 0; i < n; i++) {
sumA += nums[i]; //对原数组A的所有元素求和
sumF += i * nums[i]; //计算f(0)
}
int ans = sumF;
for (i = 1; i < n; i++) {
sumF += sumA - n * nums[n - i]; //规律得出的式子
ans = Math.max(sumF, ans);
}
return ans;
}
}
结果:
法二来源:力扣(LeetCode)
作者:Xiaohu9527
链接:https://leetcode-cn.com/problems/rotate-function/solution/oncuo-wei-xiang-jian-by-xiaohu9527-ftzh/