1、题目描述
2、解题思路
遍历数组,定义 min 表示已遍历的数组中的最小值,max 表示已遍历的数组中的最大值,ans 表示最大距离
当遍历到第一个数组 arrays.get(0) 时:
1、获取当前数组的长度 int length = arrays.get(0).size()
2、初始化 min = arrays.get(0).get(0); max = arrays.get(0).get(length-1);
3、计算得到 ans 的两个数字不能再一个数组中,所以此时 ans = 0;
当遍历到第 i 个数组 arrays.get(i) 时:
1、获取当前数组的长度 int length = arrays.get(i).size()
2、当前数组的最小值 curMin = arrays.get(i).get(0); 当前数组最大值为 arrays.get(i).get(length-1);
3、更新 ans = MAX(ans, curMax-min, max-curMin);
4、更新 min = MIN(min, curMin); max = MAX(max, curMax);
可见,经过 3 和 4,min 只会越来越小,max 越来越大,且求 ans 时的两个数字均不在一个数组中。
补充:ans 的值不是 max-min 的结果,min 和 max 是已经遍历完毕的数组中的最小值和最大值,它们可能在一个数组里面,通过 ans 的计算可知,得到 ans 的两个数字不可能在一个数组中。
3、解题代码
class Solution {
public int maxDistance(List<List<Integer>> arrays) {
List<Integer> first = arrays.get(0);
int min = first.get(0);
int fSize = first.size();
int max = first.get(fSize - 1);
int n = arrays.size();
int res = 0;
for (int i = 1; i < n; ++i) {
List<Integer> item = arrays.get(i);
int m = item.size();
int crrMin = item.get(0);
int crrMax = item.get(m - 1);
res = getmax(crrMax - min, res, max-crrMin);
max = Math.max(crrMax, max);
min = Math.min(crrMin, min);
}
return res;
}
private int getmax(int a, int b, int c) {
int res = a;
res = Math.max(res, b);
res = Math.max(res, c);
return res;
}
}