数组列表中的最大距离
难度:
标签:
题目描述
代码结果
运行时间: 84 ms, 内存: 31.7 MB
/*
* 题目:数组列表中的最大距离
* 思路:
* 1. 使用Stream遍历数组列表,找到每个数组的最小值和最大值。
* 2. 记录下全局的最小值和最大值。
* 3. 计算全局最大值与当前数组最小值的距离,和当前数组最大值与全局最小值的距离。
* 4. 更新最大距离。
*/
import java.util.List;
import java.util.stream.IntStream;
public class MaxDistanceStream {
public int maxDistance(List<List<Integer>> arrays) {
int[] minMax = arrays.stream()
.flatMapToInt(array -> IntStream.of(array.get(0), array.get(array.size() - 1)))
.sorted()
.toArray();
int minVal = minMax[0];
int maxVal = minMax[minMax.length - 1];
return arrays.stream()
.mapToInt(array -> Math.max(maxVal - array.get(0), array.get(array.size() - 1) - minVal))
.max()
.orElse(0);
}
public static void main(String[] args) {
List<List<Integer>> arrays = List.of(
List.of(1, 2, 3),
List.of(4, 5),
List.of(1, 2, 3)
);
MaxDistanceStream solution = new MaxDistanceStream();
System.out.println(solution.maxDistance(arrays)); // 输出 4
}
}
解释
方法:
该题解的思路是先遍历数组列表找到最小值和最大值及其对应的数组,然后再次遍历数组列表,计算每个数组的最后一个元素与最小值的差值,以及每个数组的第一个元素与最大值的差值,取其中的最大值作为结果,同时要排除最小值和最大值所在的数组。
时间复杂度:
O(m)
空间复杂度:
O(1)
代码细节讲解
🦆
在题解中,为什么选择10000和-1000作为初始的最小值和最大值?这些值是否适合所有可能的输入场景?
▷🦆
题解中提到要排除最小值和最大值所在的数组,这种排除具体是基于什么考虑?存在不排除这两个数组时会遇到什么问题?
▷🦆
题解中使用了三次遍历来计算最大距离,是否有可能通过减少遍历次数来优化算法?
▷🦆
在计算距离时,题解只考虑了数组的第一个和最后一个元素,这种做法是否总是有效?有没有可能数组中间的元素会影响最大距离的计算?
▷