问题:

给定一个长度为 n 的整数数组 A 。

假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的“旋转函数” F 为:

F(k) = 0 * Bk[0] + 1 * Bk[1] + ... + (n-1) * Bk[n-1]。

计算F(0), F(1), ..., F(n-1)中的最大值。

注意:
可以认为 n 的值小于 105。

示例:

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 。

来源:力扣(LeetCode)

暴力法(用表格计算F(k)):

F 4 3 2 6
旋转0次 0 1 2 3
旋转1次 1 2 3 0
旋转2次 2 3 0 1
旋转3次 3 0 1 2

上表中: ,而且,可以发现,arr每行的变化规律是每个位置都+1,如果+1后刚好等于n,那么就归0,也就是可以降维写成arr[i]=(arr[i]+1)%n

class Solution {
public:int maxRotateFunction(vector<int>& nums) {int MAX=INT_MIN,n=nums.size();vector<int> arr;arr.resize(nums.size());for(int i=0;i<n;i++)arr[i]=i; //初始化数组for(int i=0;i<n;i++){int sum=0;for(int i=0;i<n;i++)sum+=arr[i]*nums[i]; //求F(i)MAX=max(sum,MAX);for(int i=0;i<n;i++){arr[i]=(arr[i]+1)%n; //更新数组}}return MAX;}
};

数学推导法:

可以得出:

class Solution {
public:int maxRotateFunction(vector<int>& nums) {long long last=0,sum=0;int n=nums.size();for(int i=0;i<n;i++){sum+=nums[i];last+=nums[i]*i;}long long MAX=last;for(int i=1;i<n;i++){last=last+sum-(long long)n*nums[n-i];MAX=max(MAX,last);}return (int)MAX;}
};

Leetcode (396 旋转函数)相关推荐

  1. LeetCode 396. 旋转函数(数学)

    1. 题目 给定一个长度为 n 的整数数组 A . 假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的"旋转函数" F 为: F(k) = 0 * Bk[0] ...

  2. LeetCode 396. 旋转函数(Rotate Function)

    题目描述: 给定一个长度为 n 的整数数组 A . 假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的"旋转函数" F 为: F(k) = 0 * Bk[0] ...

  3. leetcode 396. Rotate Function | 396. 旋转函数(错位相减)

    题目 https://leetcode.com/problems/rotate-function/ 题解 参考了评论区 O(n)错位相减 的题解. class Solution {public int ...

  4. LeetCode:旋转链表【61】

    LeetCode:旋转链表[61] 题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5- ...

  5. 【OpenCV学习笔记】之六 手写图像旋转函数---万丈高楼平地起

    话说,平凡之处显真格,这一点也没错!  比如,对旋转图像进行双线性插值,很简单吧?  可,对我,折腾了大半天,也没有达到预期效果!  尤其是三个误区让我抓瞎好久: 1,坐标旋转公式.   这东西,要用 ...

  6. 【Leetcode -61.旋转链表 -82.删除排序链表中的重复元素Ⅱ】

    Leetcode Leetcode -61.旋转链表 Leetcode -82.删除排序链表中的重复元素Ⅱ Leetcode -61.旋转链表 题目:给你一个链表的头节点 head ,旋转链表,将链表 ...

  7. css元素转换(旋转函数、rotateX 和 rotateY 的使用、移动函数、缩放函数、过渡、动画)详解

    文章目录 旋转函数 rotateX 和 rotateY 的使用 移动函数 缩放函数 过渡 transition-timing-function 属性 动画 旋转函数 在 CSS3 中,使用 rotat ...

  8. 【数学】B094_LC_旋转函数(F(k+1) 和 F(k) 错位相减+递推)

    给定一个长度为 n 的整数数组 A,假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的"旋转函数" F 为: F ( k ) = 0 ∗ B k [ 0 ] ...

  9. 旋转函数_一招搞定高中数学函数平移旋转问题

    我们的命运,凭什么由你来决定. --蒙奇D路飞 <海贼王> 选自柴老师高中时候最爱最爱的动漫,哇,一想起来真是满满的回忆.还记得当时在学校,半个月回一次家,每次回家只能住一晚上,那天晚上就 ...

最新文章

  1. Java面试——MyBatis系列总结
  2. 对象的使用 java 1613806439
  3. PHP清除HTML代码、空格、回车换行符的函数
  4. [转载] Python str title()方法
  5. 静态密码已经OUT 探索身份验证新方式
  6. 74ls138和与非门设计全减器_用74ls138和门电路设计1位二进制全减器
  7. mysql免安装迁移_Mysql 免安装配置并迁移数据库
  8. 62、Window11+Clion+MinGW32+Rapidjson构造labelme的标注文件和解析标注文件
  9. java电信计费项目_基于jsp的电信计费-JavaEE实现电信计费 - java项目源码
  10. 使用Aspose Java在word中绘制插入表格
  11. 蹩脚英语——Translation Of Model Test Two
  12. Vue开发实例(11)之el-menu实现左侧菜单导航
  13. excel提取括号内的内容
  14. 徐鹤宁语录【销售篇】
  15. GPT专业应用:如何让GPT策划方案
  16. matlab算法实现对等额本息和等额本金两种还款方式的计算
  17. HTML页面设计之导航栏
  18. 魔法宝石(类似dp 杭电排位赛-2)
  19. yeelight智能设备+HomeKit+智汀家庭云,从零开始打造全屋智能
  20. 密码学-计算机与网络空间安全概论

热门文章

  1. 刘铁岩谈机器学习:随波逐流的太多,我们需要反思
  2. 出门问问工程副总裁黄美玉入选IEEE Fellow,曾担任微软Cortana首席NLP科学家
  3. 深度文本匹配在智能客服中的应用
  4. 最全技术剖析:百度视觉团队获世界最大规模目标检测竞赛冠军
  5. AI生态赋能2018论坛来袭!转型AI看这里!
  6. JAVA多线程和并发基础面试问答
  7. 如何优雅地展示机器学习项目!
  8. 通俗讲解集成学习算法!
  9. Jupyter官方神器:可视化 Debug 工具!
  10. 刚毕业就20w年薪,这个项目太牛逼了!