前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >396.旋转函数

396.旋转函数

作者头像
CaesarChang张旭
发布2022-04-13 17:20:31
1820
发布2022-04-13 17:20:31
举报
文章被收录于专栏:悟道悟道
代码语言:javascript
复制
 给定一个长度为 n 的整数数组 A 。
 计算F(0), F(1), ..., F(n-1)中的最大值。
 A = [4, 3, 2, 6]
 F(0) = (0 * 4) + (1 * 3) + (2 * 2) + (3 * 6) = 0 + 3 + 4 + 18 = 25
 F(1) = (0 * 6) + (1 * 4) + (2 * 3) + (3 * 2) = 0 + 4 + 6 + 6 = 16
 F(2) = (0 * 2) + (1 * 6) + (2 * 4) + (3 * 3) = 0 + 6 + 8 + 9 = 23
 F(3) = (0 * 3) + (1 * 2) + (2 * 6) + (3 * 4) = 0 + 2 + 12 + 12 = 26
 所以 F(0), F(1), F(2), F(3) 中的最大值是 F(3) = 26 。
代码语言:javascript
复制
 /**
  * 把数组逆转跟把乘数逆转是一样的,可以看出有如下规律
  *   4     3     2     6   
  *     
  *  0*4   1*3   2*2   3*6    F(0)
  *  
  *  3*4   0*3   1*2   2*6    F(1) = F(0) - SUM(data) + N * data[0];
  *  
  *  2*4   3*3   0*2   1*6    F(2) = F(1) - SUM(data) + N * data[1];
  *  
  *  1*4   2*3   3*2   0*6    F(3) = F(2) - SUM(data) + N * data[2];
  *
  */
 

规律题:

可得

代码语言:javascript
复制
    F(n)=F(n-1)+sum-n*nums[n-i];
代码语言:javascript
复制
class Solution {
    public int maxRotateFunction(int[] nums) {
        int sum=0,f=0;//注意防止大数,所以用long

        for(int i=0;i<nums.length;i++){
            sum+=nums[i];
           f+=i*nums[i];
        }
        int max=f;
        for(int i=1;i<nums.length;i++){
          f=f+sum-nums.length*nums[nums.length-i];
           max=Math.max(max,f);
        }
        return  max;
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-05-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档