2025-07-26:循环数组中相邻元素的最大差值。用go语言,给定一个循环数组 nums,请找出任意两个相邻元素之间绝对差的最

举报
福大大架构师每日一题 发表于 2025/07/26 10:17:30 2025/07/26
【摘要】 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。


解决步骤详解

  1. 输入准备

    • 准备一个整数数组 nums,长度 n 满足 (2 \leq n \leq 100),元素范围 ([-100, 100])。
  2. 初始化变量

    • 先计算首尾元素的绝对差值,作为初始最大差值(变量 res)。
    • 这里的差值计算为:|nums[0] - nums[n-1]|
  3. 遍历数组中相邻元素

    • 依次遍历数组索引从 0n-2
    • 对每个位置 i,计算相邻两个元素的绝对差值:|nums[i] - nums[i+1]|
  4. 更新最大绝对差值

    • 每计算出一个相邻元素绝对差值后,将它与当前最大值 res 进行比较。
    • 如果新的差值更大,则更新 res
    • 这样保证遍历完所有相邻对后,res 保存的是最大差值。
  5. 返回结果

    • 遍历结束,返回变量 res 即为结果。

细节说明

  • 为何先计算首尾差值?因为数组是循环的,最后一个元素和第一个元素也是相邻的,这一步确保不遗漏这个相邻对。
  • 为什么索引只遍历到 n-2?因为遍历相邻元素对 nums[i]nums[i+1],当 i = n-1i+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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。