leetcode 算法题624 (简单158) 数组列表中的最大距离
- 题目介绍
给定 m 个数组,
每个数组都已经按照升序排好序了。现在你需要从两个不同的数组中选择两个整数
(每个数组选一个)
并且计算它们的距离。
两个整数 a 和 b 之间的距离定义为它们差的绝对值 |a-b| 。
你的任务就是去找到最大距离
- 示例
[[1,2,3],[4,5],[1,2,3]]
输出: 4
解释:一种得到答案 4 的方法是从第一个数组或者第三个数组中选择 1,同时从第二个数组中选择 5 。
- 注意
- 每个给定数组至少会有 1 个数字。列表中至少有两个非空数组。
- 所有 m 个数组中的数字总数目在范围 [2, 10000] 内。
- m 个数组中所有整数的范围在 [-10000, 10000] 内。
- 解法一
/**
* @param {number[][]} arrays
* @return {number}
*/
var maxDistance = function(arrays) {
let i = 0, max = 0;
while(i < arrays.length) {
let j = 0;
while(j < arrays.length) {
if(j !== i) {
max = Math.max(max, Math.abs(arrays[i][0] - arrays[j][arrays[j].length - 1]));
}
j++;
}
i++;
}
return max;
};
执行用时 : 1352 ms, 在所有 JavaScript 提交中击败了100.00%的用户
内存消耗 : 37.7 MB, 在所有 JavaScript 提交中击败了100.00%的用户
- 解法二
* @param {number[][]} arrays
* @return {number}
*/
var maxDistance = function(arrays) {
let i = 0, max = [[-10000, -1], [-10000, -1]], min = [[10000, -1], [10000, -1]] ;
while(i < arrays.length) {
let array = arrays[i];
if(array[0] <= min[1][0]) {
min[1][0] = array[0];
min[1][1] = i;
if(min[0][0] >= min[1][0]) {
changeArrayIndex(min, 0, 1);
}
}
if(array[array.length - 1] >= max[1][0]) {
max[1][0] = array[array.length - 1];
max[1][1] = i;
if(max[0][0] <= max[1][0]) {
changeArrayIndex(max, 0, 1);
}
}
i++;
}
if(min[0][1] !== max[0][1]) {
return max[0][0] - min[0][0];
}
return Math.max(max[0][0] - min[1][0], max[1][0] - min[0][0]);
};
const changeArrayIndex = (array, i, j) => {
let temp = array[i];
array[i] = array[j];
array[j] = temp;
}
执行用时 : 96 ms, 在所有 JavaScript 提交中击败了100.00%的用户
内存消耗 : 38 MB, 在所有 JavaScript 提交中击败了100.00%的用户