3423. 循环数组中相邻元素的最大差值
题目描述
给你一个 循环 数组 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;
}