624. Maximum Distance in Arrays

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

你可能感兴趣的:(624. Maximum Distance in Arrays)