๐๐ 396. ๆ่ฝฌๅฝๆฐ
2022ๅนด10ๆ10ๆฅ
- algorithm
๐๐ 396. ๆ่ฝฌๅฝๆฐ
้พๅบฆ: ๐๐
้ฎ้ขๆ่ฟฐ
่งฃๆณ
class Solution {
public int maxRotateFunction(int[] nums) {
// ๆ่ทฏ๏ผ
// ๆพ่งๅพ
// ไพ [4, 3, 2, 6]
// f(0) = 0*4 + 1*3 + 2*2 + 3*6
// f(1) = 1*4 + 2*3 + 3*2 + 0*6
// f(2) = 2*4 + 3*3 + 0*2 + 1*6
// f(3) = 3*4 + 0*3 + 1*2 + 2*6
// ๅฏไปฅ็ๅบ๏ผf(x) = f(x - 1) + sum - len*[len - x]
// ๅ ๆญคๅฏไปฅ้ๆจๅพๅฐๆ็ป็ปๆ
int len = nums.length;
// ้ฆๅ
้ๅไธ้ๆฑ sum
int sum = 0;
for(int i: nums) {
sum += i;
}
// ๆฑ f(0)
int a = 0;
for(int i = 0; i < len; i ++) {
a += i * nums[i];
}
// ้ๆจ
int res = a;
for(int i = 1; i < len; i ++) {
// ๆ นๆฎๅไธไธช f(x - 1) ๅพๅฐ f(x)
int b = a + sum - len * nums[len - i];
res = Math.max(res, b);
a = b;
}
return res;
}
}