最小差
给定两个整数数组a
和b
,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差。
//利用双指针的方法 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; };
盛最多水的容器
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; };