【数学】B094_LC_旋转函数(F(k+1) 和 F(k) 错位相减+递推)
给定一个长度为 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) 错位相减+递推)相关推荐
- leetcode 396. Rotate Function | 396. 旋转函数(错位相减)
题目 https://leetcode.com/problems/rotate-function/ 题解 参考了评论区 O(n)错位相减 的题解. class Solution {public int ...
- 时间相减得到小时数 java_【高中数学】错位相减公式求差比数列的和
搬运一个先前的回答. 如何克服粗心导致的计算错误?www.zhihu.com 本人上海高考文数140.上海高考可以用计算器. 卷子简单不算特别高,属于那种不太拼智商,主要拼准确的考试. 在数学学习中 ...
- 高中数学数列错位相减压轴大题_错位相减法秒杀公式
错位相减法在数列求和部分属于高频考点,同学们大都会用,但是对结果总有些不确定.我们知道,等比数列前项和公式的推导方法用的是"错位相减法".在近几年的高考中,涉及到错位相减法的试题有 ...
- MATLAB® 空间数学工具箱——旋转函数
矩阵函数 这些函数返回并在原生 MATLAB 矩阵上运行.它们是工具箱的最早部分(大约 1993 年),它们的功能已被一组类取代,这些类还提供了更高的代码可读性和类型安全性. 在以下情况下,您应该使用 ...
- 【Python基础库】-在dataframe中错位相减-使用shift()函数
shift 英文:偏移 DataFrame.shift(periods=1, freq=None, axis=0) 参数 periods:类型为int,表示移动的幅度,可以是正数,也可以是负数,默认值 ...
- 像个字段相减绝对值_【高考数学】33个知识点+66个易混点大整合
乐学数韵(ID/抖音:Vlxsy8 视频号/B站:乐学数韵) 教研.解题.资源 Q群: 314559613 ,1078982440 (2群) 相关链接: 数学干 ...
- [Leetcode][第1025题][JAVA][除数博弈][数学][递推]
[问题描述][中等] [解答思路] 1. 数学证明 找规律 时间复杂度:O(1) 空间复杂度:O(1) 2. 递推 时间复杂度:O(N) 空间复杂度:O(1) class Solution {publ ...
- LeetCode 396. 旋转函数(数学)
1. 题目 给定一个长度为 n 的整数数组 A . 假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的"旋转函数" F 为: F(k) = 0 * Bk[0] ...
- 【数学】旋转后仍为函数图像问题
∣ 旋转后仍为函数图像问题 Nightguard Series. ∣ \begin{vmatrix}\huge{\textsf{ 旋转后仍为函数图像问题 }}\\\texttt{ Nightguard ...
最新文章
- Python:Scrapy的settings
- 因用了Insert into select语句,同事被开除了!
- 福利 | 从生物学到神经元:人工神经网络 ( ANN ) 简介
- 用Vue撸一个『A-Z字母滑动检索菜单』
- CI 扩展 Service
- SQLServer中round函数
- linux 脚本 提示编辑器,javascript – 带脚本的文本编辑器…适用于Linux
- MNIST机器学习入门
- OpenShift 4 - 设置集群节点和Pod容器的时间和时区
- python抓取websocket_python--websocket数据解析
- You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property
- linux shell pattern,shell 三剑客之 sed pattern 详解
- 【电气制图】AutoCad的常用操作(持续更新中...)
- win10电脑怎么将html网页做成壁纸,手把手教你win10动态桌面怎么设置
- 用Python制作一个自动抢票脚本
- 如何快速删除某几页的页眉页脚
- 《卓有成效的管理者》——学习心得(一)
- Linux在虚拟机里大小写键不停闪动是因为虚拟机内外的大小写不同导致,将虚拟机内外的大小写切换一致即可解决
- 电视盒子和机顶盒有什么区别?哪个更值得买?
- 学习正则表达式的简单方法