暴力超时:时间复杂度 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 }
posted on 2019-12-21 17:37  Chenjin123  阅读(258)  评论(0编辑  收藏  举报