Skip to content

Latest commit

 

History

History
144 lines (102 loc) · 3.58 KB

File metadata and controls

144 lines (102 loc) · 3.58 KB
comments difficulty edit_url
true
简单

English Version

题目描述

给你一个 循环 数组 nums ,请你找出相邻元素之间的 最大 绝对差值。

注意:一个循环数组中,第一个元素和最后一个元素是相邻的。

 

示例 1:

输入:nums = [1,2,4]

输出:3

解释:

由于 nums 是循环的,nums[0] 和 nums[2] 是相邻的,它们之间的绝对差值是最大值 |4 - 1| = 3 。

示例 2:

输入:nums = [-5,-10,-5]

输出:5

解释:

相邻元素 nums[0] 和 nums[1] 之间的绝对差值为最大值 |-5 - (-10)| = 5 。

 

提示:

  • 2 <= nums.length <= 100
  • -100 <= nums[i] <= 100

解法

方法一:模拟

我们遍历数组 $\textit{nums}$,计算相邻元素之间的绝对差值,并维护最大的绝对差值,最后与首尾元素之间的绝对差值比较,取最大值即可。

时间复杂度 $O(n)$,其中 $n$ 为数组 $\textit{nums}$ 的长度。空间复杂度 $O(1)$

Python3

class Solution:
    def maxAdjacentDistance(self, nums: List[int]) -> int:
        return max(max(abs(a - b) for a, b in pairwise(nums)), abs(nums[0] - nums[-1]))

Java

class Solution {
    public int maxAdjacentDistance(int[] nums) {
        int n = nums.length;
        int ans = Math.abs(nums[0] - nums[n - 1]);
        for (int i = 1; i < n; ++i) {
            ans = Math.max(ans, Math.abs(nums[i] - nums[i - 1]));
        }
        return ans;
    }
}

C++

class Solution {
public:
    int maxAdjacentDistance(vector<int>& nums) {
        int ans = abs(nums[0] - nums.back());
        for (int i = 1; i < nums.size(); ++i) {
            ans = max(ans, abs(nums[i] - nums[i - 1]));
        }
        return ans;
    }
};

Go

func maxAdjacentDistance(nums []int) int {
	ans := abs(nums[0] - nums[len(nums)-1])
	for i := 1; i < len(nums); i++ {
		ans = max(ans, abs(nums[i]-nums[i-1]))
	}
	return ans
}

func abs(x int) int {
	if x < 0 {
		return -x
	}
	return x
}

TypeScript

function maxAdjacentDistance(nums: number[]): number {
    const n = nums.length;
    let ans = Math.abs(nums[0] - nums[n - 1]);
    for (let i = 1; i < n; ++i) {
        ans = Math.max(ans, Math.abs(nums[i] - nums[i - 1]));
    }
    return ans;
}