396. 旋转函数(数学)

Posted niboss

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了396. 旋转函数(数学)相关的知识,希望对你有一定的参考价值。

技术图片

 

暴力超时:时间复杂度 O(n^2) 

 1 class Solution {
 2     public int maxRotateFunction(int[] A) {
 3         if(A.length==0) return 0;
 4         int n=A.length;
 5         int res=Integer.MIN_VALUE;
 6         for(int s=0;s<n;s++){
 7             int temp=0;
 8             for(int i=0;i<n;i++){
 9                 temp+=i*A[(s+i)%n];
10             }
11             res=Math.max(res,temp);
12         }
13         return res;
14     }
15 }

 

优化:记录一个数组和sum,初始的F(0)情况,减去一个sum,然后再加上n个A[0]值,这样得到的结果就是下一个F[1]....接下来同理。

技术图片

 1 class Solution {
 2     public int maxRotateFunction(int[] A) {
 3         if(A.length==0) return 0;
 4         int n=A.length;
 5         int sum=0,F=0;
 6         for(int i=0;i<n;i++){ //遍历求和
 7             sum+=A[i];
 8             F+=i*A[i];
 9         }
10         int res=F; //返回值
11         for(int i=0;i<n;i++){ //迭代求取下一个和
12             F-=sum;
13             F+=n*A[i];
14             res=Math.max(res,F);
15         }
16         return res;
17     }
18 }

以上是关于396. 旋转函数(数学)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 396. 旋转函数

LeetCode 824. 山羊拉丁文 / 396. 旋转函数 / 587. 安装栅栏(不会,经典凸包问题,学)

java 396.旋转Function.java

Codeforces 396A 数论,组合数学

处理屏幕旋转上的片段重复(带有示例代码)

使用 ActionBar 旋转 Android 的双片段