LeetCode 396. 旋转函数(数学)
1. 题目
给定一个长度为 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)
链接:https://leetcode-cn.com/problems/rotate-function
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 高中数学解题
F(0) 可算出
所有 A[i] 的总和 为 S
F(i+1)−F(i)=S−n∗A[n−i−i]F(i+1)-F(i) = S-n*A[n-i-i]F(i+1)−F(i)=S−n∗A[n−i−i]
右边的差值 diff 上一次的 diff 迭代到下一次,需要 +n∗A[n−i−1]−n∗A[n−i−2]+n*A[n-i-1]-n*A[n-i-2]+n∗A[n−i−1]−n∗A[n−i−2]
class Solution {public:int maxRotateFunction(vector<int>& A) {int F_i = 0, diff = 0, ans = INT_MIN, n = A.size();for(int i = 0, k = 0; i < n; ++i,++k){F_i += k*A[i];if(i != A.size()-1)diff += A[i];elsediff -= i*A[i];}ans = F_i; //f(0)for(int i = 1; i < n; ++i){F_i += diff;//f(i+1) = f(i)+diffif(F_i > ans)ans = F_i;//取最大diff += n*(A[n-i]-A[n-i-1]);//diff 差值更新}return ans;}
};
LeetCode 396. 旋转函数(数学)相关推荐
- Leetcode (396 旋转函数)
问题: 给定一个长度为 n 的整数数组 A . 假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的"旋转函数" F 为: F(k) = 0 * Bk[0] + ...
- LeetCode 396. 旋转函数(Rotate Function)
题目描述: 给定一个长度为 n 的整数数组 A . 假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的"旋转函数" F 为: F(k) = 0 * Bk[0] ...
- leetcode 396. Rotate Function | 396. 旋转函数(错位相减)
题目 https://leetcode.com/problems/rotate-function/ 题解 参考了评论区 O(n)错位相减 的题解. class Solution {public int ...
- 【数学】B094_LC_旋转函数(F(k+1) 和 F(k) 错位相减+递推)
给定一个长度为 n 的整数数组 A,假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的"旋转函数" F 为: F ( k ) = 0 ∗ B k [ 0 ] ...
- leetcode 《简单》 数学部分 Python实现
leetcode <简单> 数学部分 Python实现 ''' Fizz Buzz 写一个程序,输出从 1 到 n 数字的字符串表示.1. 如果 n 是3的倍数,输出"Fizz& ...
- LeetCode:旋转链表【61】
LeetCode:旋转链表[61] 题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5- ...
- 【OpenCV学习笔记】之六 手写图像旋转函数---万丈高楼平地起
话说,平凡之处显真格,这一点也没错! 比如,对旋转图像进行双线性插值,很简单吧? 可,对我,折腾了大半天,也没有达到预期效果! 尤其是三个误区让我抓瞎好久: 1,坐标旋转公式. 这东西,要用 ...
- matlab中计算运行时间的函数,【谁能都我一个计算时间的函数?是计算:例如上午08:00...-计算时间的函数-数学-伊凡渴同学...
概述:本道作业题是伊凡渴同学的课后练习,分享的知识点是计算时间的函数,指导老师为干老师,涉及到的知识点涵盖:[谁能都我一个计算时间的函数?是计算:例如上午08:00...-计算时间的函数-数学,下面是 ...
- 旋转的数学表达:欧拉角、轴向角、四元数与矩阵
本文发布于游戏程序员刘宇的个人博客,长期更新,转载请注明源地址,博客园同步更新https://www.cnblogs.com/xiaohutu/p/10979936.html 数学,是人类对客观世界中 ...
最新文章
- Solaris 上swap -s的解释
- 介绍一些好用的ArcToolbox工具(默认ArcGIS没有)
- InputStream,BufferedImage与byte数组之间的转换
- 石油化工设备维护检修规程_旋回破碎机横梁臂架、衬板、内外铜套检修步骤及设备检修维护要点...
- Python之数据合并——【concat()函数、merge()函数、join()方法、combine_first()方法】
- docker mysql总是退出_Docker提升测试效率之路
- android手机评测,Android手机 三大浏览器对比评测
- 软件测试 学习之路 linux vim编辑器
- 【Elasticsearch】实用BM25 -第2部分:BM25算法及其变量
- Spring AOP 底层原理_001----AspectJ与CGLIB介绍
- 《软件体系结构》第二章 软件体系结构建模
- 随机信号分析实验(matlab仿真实验)
- Windows读写硬盘
- XML约束、如何在xml中引入dtd、dtd语法、ENTITY(实体)
- matlab彩色图像锐化
- 关闭键盘按键声音和使用筛选键
- ICD建模问题总结(IED Capability Description)
- matlab 三维动态,matlab三维动态绘图
- 光武1号守卫盾,一款让优秀非凡的重疾产品【保通保险】
- mysql绑定多个ip地址 (mysql给用户授权了, 还是无法远程连接)