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. 旋转函数(数学)相关推荐

  1. Leetcode (396 旋转函数)

    问题: 给定一个长度为 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. 【数学】B094_LC_旋转函数(F(k+1) 和 F(k) 错位相减+递推)

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

  5. leetcode 《简单》 数学部分 Python实现

    leetcode <简单> 数学部分 Python实现 ''' Fizz Buzz 写一个程序,输出从 1 到 n 数字的字符串表示.1. 如果 n 是3的倍数,输出"Fizz& ...

  6. LeetCode:旋转链表【61】

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

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

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

  8. matlab中计算运行时间的函数,【谁能都我一个计算时间的函数?是计算:例如上午08:00...-计算时间的函数-数学-伊凡渴同学...

    概述:本道作业题是伊凡渴同学的课后练习,分享的知识点是计算时间的函数,指导老师为干老师,涉及到的知识点涵盖:[谁能都我一个计算时间的函数?是计算:例如上午08:00...-计算时间的函数-数学,下面是 ...

  9. 旋转的数学表达:欧拉角、轴向角、四元数与矩阵

    本文发布于游戏程序员刘宇的个人博客,长期更新,转载请注明源地址,博客园同步更新https://www.cnblogs.com/xiaohutu/p/10979936.html 数学,是人类对客观世界中 ...

最新文章

  1. Solaris 上swap -s的解释
  2. 介绍一些好用的ArcToolbox工具(默认ArcGIS没有)
  3. InputStream,BufferedImage与byte数组之间的转换
  4. 石油化工设备维护检修规程_旋回破碎机横梁臂架、衬板、内外铜套检修步骤及设备检修维护要点...
  5. Python之数据合并——【concat()函数、merge()函数、join()方法、combine_first()方法】
  6. docker mysql总是退出_Docker提升测试效率之路
  7. android手机评测,Android手机 三大浏览器对比评测
  8. 软件测试 学习之路 linux vim编辑器
  9. 【Elasticsearch】实用BM25 -第2部分:BM25算法及其变量
  10. Spring AOP 底层原理_001----AspectJ与CGLIB介绍
  11. 《软件体系结构》第二章 软件体系结构建模
  12. 随机信号分析实验(matlab仿真实验)
  13. Windows读写硬盘
  14. XML约束、如何在xml中引入dtd、dtd语法、ENTITY(实体)
  15. matlab彩色图像锐化
  16. 关闭键盘按键声音和使用筛选键
  17. ICD建模问题总结(IED Capability Description)
  18. matlab 三维动态,matlab三维动态绘图
  19. 光武1号守卫盾,一款让优秀非凡的重疾产品【保通保险】
  20. mysql绑定多个ip地址 (mysql给用户授权了, 还是无法远程连接)

热门文章

  1. 应用层协议:HTTP与HTTPS协议详解、二者的区别
  2. php年月转换为年月日,php 将秒数转换为年、月、日、小时等时间格式
  3. 高中关于人工智能方面的课题_如何看待计算机专业开始设置人工智能课程
  4. html:web前端开发规范
  5. asp.net 的页面几种传值方式
  6. HDOJ 5071 Chat 模拟
  7. jsp 内置的对象的简要概述(转)
  8. mysql 8.0 一条insert语句的具体执行流程分析(一)
  9. 噪声控制简史,以及几个简单的声学概念
  10. 随想,对嵌入式职场建议