Skip to main content

Maximum of Absolute Value Expression

Problem statement

Given two arrays of integers with equal lengths, return the maximum value of:

|arr1[i] - arr1[j]| + |arr2[i] - arr2[j]| + |i - j|

where the maximum is taken over all 0 <= i, j < arr1.length.

Example 1:

Input: arr1 = [1,2,3,4], arr2 = [-1,4,5,6]Output: 13

Example 2:

Input: arr1 = [1,-2,-5,0,10], arr2 = [0,-2,-1,-7,-4]Output: 20

Constraints:

  • 2 <= arr1.length == arr2.length <= 40000
  • -10^6 <= arr1[i], arr2[i] <= 10^6

My solution

/**
* @param {number[]} arr1
* @param {number[]} arr2
* @return {number}
*/
// https://leetcode.com/problems/maximum-of-absolute-value-expression/discuss/1010450/Java-and-C%2B%2B-With-Explanation-O(n)
var maxAbsValExpr = function(arr1, arr2) {
let maxValues = Array.from({
length: 4
}, () => Number.MIN_SAFE_INTEGER)

let minValues = Array.from({
length: 4
}, () => Number.MAX_SAFE_INTEGER)

for (let i = 0; i < arr1.length; i++) {
// console.log("last", maxValues[3], minValues[3], arr1[i] - arr2[i] - i)
maxValues = [
Math.max(maxValues[0], arr1[i] + arr2[i] + i),
Math.max(maxValues[1], arr1[i] + arr2[i] - i),
Math.max(maxValues[2], arr1[i] - arr2[i] + i),
Math.max(maxValues[3], arr1[i] - arr2[i] - i),
]
minValues = [
Math.min(minValues[0], arr1[i] + arr2[i] + i),
Math.min(minValues[1], arr1[i] + arr2[i] - i),
Math.min(minValues[2], arr1[i] - arr2[i] + i),
Math.min(minValues[3], arr1[i] - arr2[i] - i),
]
// console.log(maxValues, minValues)
}
// console.log(maxValues, minValues)
const max = maxValues.reduce((acc, curr, index) => {
const maxNow = maxValues[index]
const minNow = minValues[index]
// console.log(maxNow, minNow)
acc = Math.max(acc, maxNow - minNow)
// console.log("acc", acc)
return acc;
}, Number.MIN_SAFE_INTEGER)

// console.log(max)
return max;
};