题目来源:LeetCode 396:旋转函数
问题抽象: 给定一个整数数组 nums(长度为 n),需计算其所有 旋转函数值 F(0), F(1), ..., F(n-1) 并返回最大值,其中旋转函数定义为:
-
函数定义:
F(k) = Σ_{i=0}^{n-1} [i × nums[(k+i) \mod n]](k为旋转偏移量);- 形式化:
k=0时:F(0) = 0×nums[0] + 1×nums[1] + ... + (n-1)×nums[n-1];k=1时:F(1) = 0×nums[n-1] + 1×nums[0] + ... + (n-1)×nums[n-2]。
-
优化目标:
- 避免直接计算
n个函数(时间复杂度O(n²)不可行); - 利用 递推关系:
F(k+1) = F(k) + S - n × nums[n-1-k](S为数组总和);- 先计算
F(0)和S,再递推所有F(k)。
- 避免直接计算
-
边界处理:
- 空数组:返回
0; - 单元素数组:
F(0)=0; - 大数溢出:结果在
32位整数范围内(题目保证); - 负值处理:数组元素可为负数(需正确计算)。
- 空数组:返回
-
计算约束:
- 时间复杂度 O(n):
- 计算
S和F(0):遍历一次数组; - 递推
F(k):单次遍历;
- 计算
- 空间复杂度 O(1):仅存储
S、F(0)和当前最大值; - 输入规模:数组长度
n ≤ 10^5,元素值[-100, 100]。
- 时间复杂度 O(n):
-
特殊案例:
nums=[4,3,2,6]:F(0)=0×4+1

2596

被折叠的 条评论
为什么被折叠?



