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

F ( k ) = 0 ∗ B k [ 0 ] + 1 ∗ B k [ 1 ] + . . . + ( n − 1 ) ∗ B k [ n − 1 ] F(k) = 0 * B_k[0] + 1 * B_k[1] + ... + (n-1) * B_k[n-1] F(k)=0∗Bk​[0]+1∗Bk​[1]+...+(n−1)∗Bk​[n−1]

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

注意: 可以认为 n 的值小于 10^5

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
方法一:数学推导

思路

F(k) = 0 × B[0] + 1 × B[1] + 2 × B[2]… + (n-1) × B[n-1] … ①
F(k+1) = 0 × B[n-1] + 1 × B[0] + 2 × B[1] … + (n-1) × B[n-2] … ②

②-① 就是一个错位相减,结果为 ③:

F(k+1)-F(k) = B[0] + B[1] + B[2] + … + B[n-1] - n × B[n-1]
F(k+1)-F(k) = sum(B) - n × B[n-1]
F(k+1) = F[k] + sum(B) - n × B[n-1] … ③

由于 B 是旋转得到的,故每次求 F(k+1)时,末尾元素 A[n-1] 就变成了 A[n-2]

class Solution {public:int maxRotateFunction(vector<int>& A) {long n=A.size(), S=0, F1=0, F2=0;for (int i=0; i<n; i++) F1 += i*A[i], S+=A[i];long ans=F1;for (int i=1; i<n; i++) {F2 = F1 + S - n*A[n-i];ans=max(ans, F2);F1 = F2;}return ans;}
};

复杂度分析

  • Time: O ( n ) O(n) O(n),
  • Space: O ( 1 ) O(1) O(1)

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

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

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

  2. 时间相减得到小时数 java_【高中数学】错位相减公式求差比数列的和

    搬运一个先前的回答. 如何克服粗心导致的计算错误?​www.zhihu.com 本人上海高考文数140.上海高考可以用计算器. 卷子简单不算特别高,属于那种不太拼智商,主要拼准确的考试. 在数学学习中 ...

  3. 高中数学数列错位相减压轴大题_错位相减法秒杀公式

    错位相减法在数列求和部分属于高频考点,同学们大都会用,但是对结果总有些不确定.我们知道,等比数列前项和公式的推导方法用的是"错位相减法".在近几年的高考中,涉及到错位相减法的试题有 ...

  4. MATLAB® 空间数学工具箱——旋转函数

    矩阵函数 这些函数返回并在原生 MATLAB 矩阵上运行.它们是工具箱的最早部分(大约 1993 年),它们的功能已被一组类取代,这些类还提供了更高的代码可读性和类型安全性. 在以下情况下,您应该使用 ...

  5. 【Python基础库】-在dataframe中错位相减-使用shift()函数

    shift 英文:偏移 DataFrame.shift(periods=1, freq=None, axis=0) 参数 periods:类型为int,表示移动的幅度,可以是正数,也可以是负数,默认值 ...

  6. 像个字段相减绝对值_【高考数学】33个知识点+66个易混点大整合

                    乐学数韵(ID/抖音:Vlxsy8   视频号/B站:乐学数韵)  教研.解题.资源 Q群: 314559613  ,1078982440 (2群) 相关链接: 数学干 ...

  7. [Leetcode][第1025题][JAVA][除数博弈][数学][递推]

    [问题描述][中等] [解答思路] 1. 数学证明 找规律 时间复杂度:O(1) 空间复杂度:O(1) 2. 递推 时间复杂度:O(N) 空间复杂度:O(1) class Solution {publ ...

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

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

  9. 【数学】旋转后仍为函数图像问题

    ∣ 旋转后仍为函数图像问题 Nightguard Series. ∣ \begin{vmatrix}\huge{\textsf{ 旋转后仍为函数图像问题 }}\\\texttt{ Nightguard ...

最新文章

  1. Python:Scrapy的settings
  2. 因用了Insert into select语句,同事被开除了!
  3. 福利 | 从生物学到神经元:人工神经网络 ( ANN ) 简介
  4. 用Vue撸一个『A-Z字母滑动检索菜单』
  5. CI 扩展 Service
  6. SQLServer中round函数
  7. linux 脚本 提示编辑器,javascript – 带脚本的文本编辑器…适用于Linux
  8. MNIST机器学习入门
  9. OpenShift 4 - 设置集群节点和Pod容器的时间和时区
  10. python抓取websocket_python--websocket数据解析
  11. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property
  12. linux shell pattern,shell 三剑客之 sed pattern 详解
  13. 【电气制图】AutoCad的常用操作(持续更新中...)
  14. win10电脑怎么将html网页做成壁纸,手把手教你win10动态桌面怎么设置
  15. 用Python制作一个自动抢票脚本
  16. 如何快速删除某几页的页眉页脚
  17. 《卓有成效的管理者》——学习心得(一)
  18. Linux在虚拟机里大小写键不停闪动是因为虚拟机内外的大小写不同导致,将虚拟机内外的大小写切换一致即可解决
  19. 电视盒子和机顶盒有什么区别?哪个更值得买?
  20. 学习正则表达式的简单方法

热门文章

  1. php使用consul,使用consul
  2. java hash 取模_Hash取模与一致性Hash
  3. mybatis教程6(逆向工程)
  4. Qt LinuxFB旋转界面和触摸
  5. AWS(亚马逊云) EC2 Linux | ssh 使用密码登录
  6. Matlab R2016b 版本配置+安装LIBSVM 呕心沥血整理全集
  7. GDOI 2017总结(附蜜汁二维线段树+IO优化)
  8. js实战案例--点击关闭二维码
  9. 网络层的各种协议(IP层)
  10. MITA触摸屏维修WP4053米塔工控机控制屏维修