上周weekly contest的簽到題沃琅,思路的話我想的是第一趟先找出最小/最大元素戴涝,記錄下他們元素的位置膘掰;再來一趟找出不在他們對應位置的最小值,最后比較一下拧抖。這樣就避免了最小的數(shù)和最大的數(shù)在同一個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;
}
}