上周weekly contest的签到题,思路的话我想的是第一趟先找出最小/最大元素,记录下他们元素的位置;再来一趟找出不在他们对应位置的最小值,最后比较一下。这样就避免了最小的数和最大的数在同一个array里。
走了两趟:
public int maxDistance(int[][] arrays) {
int min1 = arrays[0][arrays[0].length - 1];
int max1 = arrays[0][0];
int min2 = arrays[0][arrays[0].length - 1];
int max2 = arrays[0][0];
int min1Index = -1;
int max1Index = -1;
for (int i = 0; i < arrays.length; i++) {
if (arrays[i] != null && arrays[i].length > 0) {
if (arrays[i][0] < min1) {
min1 = arrays[i][0];
min1Index = i;
}
}
if (arrays[i] != null && arrays[i].length > 0) {
if (arrays[i][arrays[i].length - 1] > max1) {
max1 = arrays[i][arrays[i].length - 1];
max1Index = i;
}
}
}
for (int i = 0; i < arrays.length; i++) {
if (arrays[i] != null && arrays[i].length > 0 && i != max1Index) {
min2 = Math.min(arrays[i][0], min2);
}
if (arrays[i] != null && arrays[i].length > 0 && i != min1Index) {
max2 = Math.max(arrays[i][arrays[i].length - 1], max2);
}
}
return Math.max(Math.abs(min2 - max1), Math.abs(min1 - max2));
}
贴一下走一趟的方法:
public class Solution {
public int maxDistance(int[][] arrays) {
int result = Integer.MIN_VALUE;
int max = arrays[0][arrays[0].length - 1];
int min = arrays[0][0];
for (int i = 1; i < arrays.length; i++) {
result = Math.max(result, Math.abs(arrays[i][0] - max));
result = Math.max(result, Math.abs(arrays[i][arrays[i].length - 1] - min));
max = Math.max(max, arrays[i][arrays[i].length - 1]);
min = Math.min(min, arrays[i][0]);
}
return result;
}
}