首页 > 其他 > 详细

396. 旋转函数(数学)

时间:2019-12-21 18:19:54      阅读:64      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

暴力超时:时间复杂度 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. 旋转函数(数学)

原文:https://www.cnblogs.com/NiBosS/p/12077414.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!