The given expression can be rewritten by considering all possible sign combinations for the absolute values. For each combination, the expression reduces to a linear form, and the answer is the maximum difference for each form.
classSolution {
funmaxAbsValExpr(arr1: IntArray, arr2: IntArray): Int {
val n = arr1.size
var ans = 0val signs = listOf(1, -1)
for (s1 in signs) {
for (s2 in signs) {
var mx = Int.MIN_VALUE
var mn = Int.MAX_VALUE
for (i in0 until n) {
val v = s1 * arr1[i] + s2 * arr2[i] + i
mx = maxOf(mx, v)
mn = minOf(mn, v)
}
ans = maxOf(ans, mx - mn)
}
}
return ans
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
classSolution:
defmaxAbsValExpr(self, arr1: list[int], arr2: list[int]) -> int:
n = len(arr1)
ans =0for s1 in [1, -1]:
for s2 in [1, -1]:
mx, mn = float('-inf'), float('inf')
for i in range(n):
v = s1 * arr1[i] + s2 * arr2[i] + i
mx = max(mx, v)
mn = min(mn, v)
ans = max(ans, mx - mn)
return ans
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
impl Solution {
pubfnmax_abs_val_expr(arr1: Vec<i32>, arr2: Vec<i32>) -> i32 {
let n = arr1.len();
letmut ans =0;
for&s1 in&[1, -1] {
for&s2 in&[1, -1] {
letmut mx =i32::MIN;
letmut mn =i32::MAX;
for i in0..n {
let v = s1 * arr1[i] + s2 * arr2[i] + i asi32;
mx = mx.max(v);
mn = mn.min(v);
}
ans = ans.max(mx - mn);
}
}
ans
}
}