豆包 LeetCode 624. 数组列表中的最大距离 Android实现

发布时间:2026/11/1 1:53:04
豆包 LeetCode 624. 数组列表中的最大距离 Android实现

LeetCode 624. 数组列表中的最大距离 — Android 实现

思路

数组都已升序排列,所以每个数组的最小值是arr[0]、最大值是arr[arr.length-1]。

要算"两个不同数组"间的最大距离,贪心即可:

  • 遍历时维护已经过数组的最小值min和最大值max;
  • 对当前数组,只用它的两端去跟历史极值做差:max - curMin和curMax - min,取最大;
  • 因为距离只可能来自"某数组的最小值"与"另一数组的最大值"这两端,中间元素不会贡献更大距离。

关键点:必须先算完距离再更新min/max,否则会把当前数组和自己的两端配对,违反"不同数组"约束。

复杂度:时间 O(m),空间 O(1)。

核心算法(Java,可直接用于 Android)

public int maxDistance(List<List<Integer>> arrays) { int res = 0; int min = arrays.get(0).get(0); int max = arrays.get(0).get(arrays.get(0).size() - 1); for (int i = 1; i < arrays.size(); i++) { List<Integer> arr = arrays.get(i); int curMin = arr.get(0); int curMax = arr.get(arr.size() - 1); // 先比较再更新,保证来自不同数组 res = Math.max(res, Math.max(max - curMin, curMax - min)); min = Math.min(min, curMin); max = Math.max(max, curMax); } return res; }

边界处理(推荐写法)

题目保证 m ≥ 2 且每个数组非空,若你要更稳妥,可加空判断:

public int maxDistance(List<List<Integer>> arrays) { if (arrays == null || arrays.size() < 2) return 0; int res = 0; int min = arrays.get(0).get(0); int max = arrays.get(0).get(arrays.get(0).size() - 1); for (int i = 1; i < arrays.size(); i++) { List<Integer> arr = arrays.get(i); if (arr.isEmpty()) continue; int curMin = arr.get(0); int curMax = arr.get(arr.size() - 1); res = Math.max(res, Math.max(max - curMin, curMax - min)); min = Math.min(min, curMin); max = Math.max(max, curMax); } return res; }

Android 落地方式

算法本身是纯逻辑,放在任意层都可复用,推荐作为工具类或 ViewModel 中的方法:

// 工具类:AlgorithmUtils.java public final class AlgorithmUtils { private AlgorithmUtils() {} public static int maxDistance(List<List<Integer>> arrays) { // 上面的实现 } }

在 ViewModel / Repository 中调用:

public class MainViewModel extends ViewModel { public LiveData<Integer> result; public void computeMaxDistance(List<List<Integer>> arrays) { // 数据可来自 Room / 网络 / 本地构造 int distance = AlgorithmUtils.maxDistance(arrays); result.setValue(distance); } }

Kotlin 版本

fun maxDistance(arrays: List<List<Int>>): Int { if (arrays.size < 2) return 0 var res = 0 var min = arrays[0].first() var max = arrays[0].last() for (i in 1 until arrays.size) { val arr = arrays[i] val curMin = arr.first() val curMax = arr.last() res = maxOf(res, max - curMin, curMax - min) min = minOf(min, curMin) max = maxOf(max, curMax) } return res }

验证示例:[[1,2,3],[4,5],[1,2,3]]→ 最大距离是4 - 1 = 3(第2数组的 4 与第3数组的 1)。你的函数签名是public int maxDistance(List<List<Integer>> arrays)吗?需要我按 Android 的某个具体层(如用 Kotlin + Coroutine 从数据源取数)再展开吗?