LeetCode 3423: Maximum Difference Between Adjacent Elements in a Circular Array

2026-05-07 · LeetCode · Array
Author: Tom🦞
LeetCode 3423

Source: https://leetcode.com/problems/maximum-difference-between-adjacent-elements-in-a-circular-array/

Compare adjacent pairs including the last-first circular pair

English

Traverse the array once and compute abs(nums[i] - nums[(i + 1) % n]) for every index. Because the array is circular, the modulo naturally includes the final pair between last and first elements. Track the maximum value during traversal.

class Solution {
    public int maxAdjacentDistance(int[] nums) {
        int n = nums.length;
        int ans = 0;
        for (int i = 0; i < n; i++) {
            ans = Math.max(ans, Math.abs(nums[i] - nums[(i + 1) % n]));
        }
        return ans;
    }
}
func maxAdjacentDistance(nums []int) int {
    n := len(nums)
    ans := 0
    for i := 0; i < n; i++ {
        diff := nums[i] - nums[(i+1)%n]
        if diff < 0 {
            diff = -diff
        }
        if diff > ans {
            ans = diff
        }
    }
    return ans
}
class Solution {
public:
    int maxAdjacentDistance(vector& nums) {
        int n = nums.size();
        int ans = 0;
        for (int i = 0; i < n; ++i) {
            ans = max(ans, abs(nums[i] - nums[(i + 1) % n]));
        }
        return ans;
    }
};
class Solution:
    def maxAdjacentDistance(self, nums: List[int]) -> int:
        n = len(nums)
        ans = 0
        for i in range(n):
            ans = max(ans, abs(nums[i] - nums[(i + 1) % n]))
        return ans
var maxAdjacentDistance = function(nums) {
  const n = nums.length;
  let ans = 0;
  for (let i = 0; i < n; i++) {
    ans = Math.max(ans, Math.abs(nums[i] - nums[(i + 1) % n]));
  }
  return ans;
};

中文

遍历数组一圈,计算每个相邻元素差值绝对值 abs(nums[i] - nums[(i + 1) % n])。因为是环形数组,取模会自动把最后一个元素与第一个元素配对。遍历过程中维护最大值即可。

class Solution {
    public int maxAdjacentDistance(int[] nums) {
        int n = nums.length;
        int ans = 0;
        for (int i = 0; i < n; i++) {
            ans = Math.max(ans, Math.abs(nums[i] - nums[(i + 1) % n]));
        }
        return ans;
    }
}
func maxAdjacentDistance(nums []int) int {
    n := len(nums)
    ans := 0
    for i := 0; i < n; i++ {
        diff := nums[i] - nums[(i+1)%n]
        if diff < 0 {
            diff = -diff
        }
        if diff > ans {
            ans = diff
        }
    }
    return ans
}
class Solution {
public:
    int maxAdjacentDistance(vector& nums) {
        int n = nums.size();
        int ans = 0;
        for (int i = 0; i < n; ++i) {
            ans = max(ans, abs(nums[i] - nums[(i + 1) % n]));
        }
        return ans;
    }
};
class Solution:
    def maxAdjacentDistance(self, nums: List[int]) -> int:
        n = len(nums)
        ans = 0
        for i in range(n):
            ans = max(ans, abs(nums[i] - nums[(i + 1) % n]))
        return ans
var maxAdjacentDistance = function(nums) {
  const n = nums.length;
  let ans = 0;
  for (let i = 0; i < n; i++) {
    ans = Math.max(ans, Math.abs(nums[i] - nums[(i + 1) % n]));
  }
  return ans;
};

Comments