【LeetCode】刷题日记02

最小差

给定两个整数数组ab,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差。

//利用双指针的方法
var smallestDifference = function(a, b) {
    //先给两个数组排序
    a.sort((a,b) => a-b);
    b.sort((a,b) => a-b);
    //2147483647是题目给出的数组项最大值,方便与后面的值比较取小
    let i = 0, j = 0, min = 2147483647;
    while (i < a.length && j < b.length) {
        if (a[i] < b[j] && i < a.length) {
            min = Math.min(b[j] - a[i], min);
            i++;
        } else if (a[i] < b[j]) {
            min = Math.min(b[j] - a[i], min);
            //这种情况表示的是a数组的指针已经指向了最后一位,只能移动b的指针
            j++;
        }  else if (j < b.length) {
            min = Math.min(a[i] - b[j], min);
            j++;
        } else {
            min = Math.min(a[i] - b[j], min);
            i++;
        }
    }
    return min;
};

盛最多水的容器

【LeetCode】刷题日记02_第1张图片

var maxArea = function(height) {
    let left = 0;
    let right = height.length - 1;
    let max = 0;
    while(left < right) {
        const area = (right - left) * Math.min(height[right], height[left]);
        if (area > max) {
            max = area
        }
        if (height[left] < height[right]) {
            const lastLeft = height[left];
            left++;
            while(height[left] <= lastLeft && left < right) {
                left++;
            }
        } else {
            const lastRight = height[right];
            right--;
            while(lastRight >= height[right] && left < right) {
                right--;
            }
        }
    }
    return max;
};

你可能感兴趣的:(【LeetCode】刷题日记02)