【LeetCode - 624】数组列表中的最大距离

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;
	}
}

版权声明:本文为qq_29051413原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。