2025-07-26:循环数组中相邻元素的最大差值。用go语言,给定一个循环数组 nums,请找出任意两个相邻元素之间绝对差的最
【摘要】 2025-07-26:循环数组中相邻元素的最大差值。用go语言,给定一个循环数组 nums,请找出任意两个相邻元素之间绝对差的最大值。提示:由于数组是循环的,最后一个元素和第一个元素也算相邻。2 <= nums.length <= 100。-100 <= nums[i] <= 100。输入:nums = [1,2,4]。输出:3。解释:由于 nums 是循环的,nums[0] 和 nums[...
2025-07-26:循环数组中相邻元素的最大差值。用go语言,给定一个循环数组 nums,请找出任意两个相邻元素之间绝对差的最大值。
提示:由于数组是循环的,最后一个元素和第一个元素也算相邻。
2 <= nums.length <= 100。
-100 <= nums[i] <= 100。
输入:nums = [1,2,4]。
输出:3。
解释:
由于 nums 是循环的,nums[0] 和 nums[2] 是相邻的,它们之间的绝对差值是最大值 |4 - 1| = 3 。
题目来自力扣3423。
解决步骤详解
-
输入准备:
- 准备一个整数数组
nums
,长度n
满足 (2 \leq n \leq 100),元素范围 ([-100, 100])。
- 准备一个整数数组
-
初始化变量:
- 先计算首尾元素的绝对差值,作为初始最大差值(变量
res
)。 - 这里的差值计算为:
|nums[0] - nums[n-1]|
。
- 先计算首尾元素的绝对差值,作为初始最大差值(变量
-
遍历数组中相邻元素:
- 依次遍历数组索引从
0
到n-2
。 - 对每个位置
i
,计算相邻两个元素的绝对差值:|nums[i] - nums[i+1]|
。
- 依次遍历数组索引从
-
更新最大绝对差值:
- 每计算出一个相邻元素绝对差值后,将它与当前最大值
res
进行比较。 - 如果新的差值更大,则更新
res
。 - 这样保证遍历完所有相邻对后,
res
保存的是最大差值。
- 每计算出一个相邻元素绝对差值后,将它与当前最大值
-
返回结果:
- 遍历结束,返回变量
res
即为结果。
- 遍历结束,返回变量
细节说明
- 为何先计算首尾差值?因为数组是循环的,最后一个元素和第一个元素也是相邻的,这一步确保不遗漏这个相邻对。
- 为什么索引只遍历到
n-2
?因为遍历相邻元素对nums[i]
和nums[i+1]
,当i = n-1
时i+1
会越界,所以只到n-2
,首尾特殊处理确保不遗漏首尾相邻对。 - 绝对差值计算需要转换为绝对值,避免负值误判。
时间复杂度分析
- 代码只进行了一次遍历(从第0个元素遍历到第n-2个元素),每一步计算绝对差并比较大小。
- 遍历时间是 O(n),其中 n 是数组长度。
- 计算绝对值和比较都为常数时间操作。
所以,整体时间复杂度是 O(n)。
空间复杂度分析
- 除了输入数组
nums
,程序只使用了几个变量用于存储长度、结果等常数空间。 - 没有额外基于输入大小的动态空间开销。
因此,额外空间复杂度是 O(1)。
总结
- 算法核心是遍历所有相邻元素对(包括首尾这对),找出其中的最大绝对差。
- 时间效率线性,空间开销常数。
- 适合于长度不大,元素整型的循环数组差值最大值问题。
Go完整代码如下:
package main
import (
"fmt"
"math"
)
func maxAdjacentDistance(nums []int) int {
n := len(nums)
res := int(math.Abs(float64(nums[0] - nums[n-1])))
for i := 0; i < n-1; i++ {
res = int(math.Max(float64(res), math.Abs(float64(nums[i]-nums[i+1]))))
}
return res
}
func main() {
nums := []int{1, 2, 4}
result := maxAdjacentDistance(nums)
fmt.Println(result)
}
Python完整代码如下:
# -*-coding:utf-8-*-
def max_adjacent_distance(nums):
n = len(nums)
# 考虑循环,首尾相邻的差值
res = abs(nums[0] - nums[-1])
for i in range(n - 1):
res = max(res, abs(nums[i] - nums[i + 1]))
return res
if __name__ == "__main__":
nums = [1, 2, 4]
result = max_adjacent_distance(nums)
print(result)
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)