396. Rotate Function
来源:互联网 发布:中国水果消费数据统计 编辑:程序博客网 时间:2024/06/11 07:32
Given an array of integers A
and let n to be its length.
Assume Bk
to be an array obtained by rotating the array A
k positions clock-wise, we define a "rotation function" F
on A
as follow:
F(k) = 0 * Bk[0] + 1 * Bk[1] + ... + (n-1) * Bk[n-1]
.
Calculate the maximum value of F(0), F(1), ..., F(n-1)
.
Note:
n is guaranteed to be less than 105.
Example:
A = [4, 3, 2, 6]F(0) = (0 * 4) + (1 * 3) + (2 * 2) + (3 * 6) = 0 + 3 + 4 + 18 = 25F(1) = (0 * 6) + (1 * 4) + (2 * 3) + (3 * 2) = 0 + 4 + 6 + 6 = 16F(2) = (0 * 2) + (1 * 6) + (2 * 4) + (3 * 3) = 0 + 6 + 8 + 9 = 23F(3) = (0 * 3) + (1 * 2) + (2 * 6) + (3 * 4) = 0 + 2 + 12 + 12 = 26So the maximum value of F(0), F(1), F(2), F(3) is F(3) = 26.这道题你可以按他的等式来计算每一个Fn,时间复杂度是 O(n2)。代码如下:
public class Solution { public int maxRotateFunction(int[] A) { if (A.length == 0) { return 0; } int max = Integer.MIN_VALUE; int Fn = 0; for (int i = 0; i < A.length; i++) { for (int j = 0; j < A.length; j++) { if (i + j < A.length) Fn += A[i + j] * j; else Fn += A[i + j - A.length] * j; } max = Math.max(max, Fn); Fn = 0; } return max; }}也可以推出来 Fn 的递推关系,推到过程如下:
F(k) = 0 * Bk[0] + 1 * Bk[1] + ... + (n-1) * Bk[n-1]F(k+1) = 0 * Bk[n-1] + 1 * Bk[0] + ... + (n-2) * Bk[n-3] + (n-1) * Bk[n-2]
Then,
F(k+1) - F(k) = Bk[0] + Bk[1] + Bk[2] + ... + Bk[n-1] - (n)Bk[n-1] = (Bk[0] + ... + Bk[n-1]) - (n)Bk[n-1] = sum - (n)Bk[n-1]
Thus,
F(k+1) = F(k) + sum - (n)Bk[n-1]
代码如下:public class Solution { public int maxRotateFunction(int[] A) { if (A.length == 0) { return 0; } int Fn = 0; int sum = 0; for (int i = 0; i < A.length; i++) { Fn += i * A[i]; sum += A[i]; } int max = Fn; for (int i = A.length - 1; i >= 0; i--) { Fn = Fn + sum - A.length * A[i]; max = Math.max(max, Fn); } return max; }}
0 0
- 396. Rotate Function
- 【Leetcode】396. Rotate Function
- [LeetCode]396. Rotate Function
- 396. Rotate Function
- 396. Rotate Function
- LeetCode 396. Rotate Function
- 396. Rotate Function
- 396. Rotate Function
- 396. Rotate Function
- [leetcode]396. Rotate Function
- 396. Rotate Function
- [LeetCode]--396. Rotate Function
- 396. Rotate Function
- leetcode 396. Rotate Function
- [LeetCode] 396. Rotate Function
- 396. Rotate Function
- 396. Rotate Function (python)
- 396. Rotate Function
- HTML5常见面试题及答案(一)
- 【MongoDb探究】07-游标操作
- Java的ResourceBundle读取properties文件
- 最少操作次数的简易版
- 作为前端你不得不知-浏览器的工作原理:网络浏览器幕后揭秘
- 396. Rotate Function
- 二元查找树转变成排序的双向链表
- SpringBoot学习
- android自定义view--构造函数讲解
- 20170114C++阶段班04_STL_01string
- 程序员面试金典: 9.13 C和C++ 13.8编写一个智能指针类
- 响应式开发(三)-----Bootstrap框架的安装使用
- LeetCode Valid Sudoku
- AngularJs作用域