次のように内容は次のとおりです。
等しい長さの整数の二つの配列所与の最大値を返します。
|arr1[i] - arr1[j]| + |arr2[i] - arr2[j]| + |i - j|
最大は全て引き継いでいる場合
0 <= i, j < arr1.length
。
例1:
入力:ARR1 = [1,2,3,4]、ARR2 = [-1,4,5,6-] 出力:13例2:
入力:ARR1 = [1、-2、-5,0,10]、ARR2 = [0、-2、-1、-7、-4] 出力:20
制約:
2 <= arr1.length == arr2.length <= 40000
-10^6 <= arr1[i], arr2[i] <= 10^6
ソリューションの概要:発現のために| ARR1 [I] - ARR1 [ J] | + | ARR2 [I] - ARR2 [J] | + | I - J |、 私は<jの場合、この式の値でこれは、次の4つのいずれかです。
(ARR1 [I] + ARR2 [I] - I) - (ARR1 [J] + ARR2 [J] - j)は
(ARR1 [I] - ARR2 [I] - I) - (ARR1 [J] - ARR2 [J] - j)は
(ARR2 [I] - ARR1 [I] - I) - (ARR2 [J] - ARR1 [J] - j)は
(ARR2 [I] + ARR1 [I] + I) - (ARR2 [J] + ARR1 [J] + J)
一次配列のトラバース限り、可能な4つの最大値と最小値の発現の差を求めます。
コードは以下の通りであります:
クラス溶液(オブジェクト): DEF maxAbsValExpr(自己、ARR1、ARR2): "" " :タイプARR1:リスト[INT] :タイプARR2:リスト[INT] :RTYPE:INT """ case_1_max = case_2_max = case_3_max = case_4_max = -float(' INF ' ) case_1_min = case_2_min = case_3_min = case_4_min =フロート(' INF ' ) のための I における範囲(LEN(ARR1)): case_1_max = MAX(case_1_max、ARR1 [I] + ARR2 [I] - I) case_1_min =分(case_1_min、ARR1 [i]が+ ARR2 [I] - I) case_2_max = MAX(case_2_max、ARR1 [I] - ARR2 [I] - 、I) case_2_min =分(case_2_min、ARR1 [I] - ARR2 [I] - 、I) case_3_max = MAX(case_3_max、ARR2 [I] - ARR1 [I] - 、I) case_3_min =分(case_3_min、ARR2 [I] - ARR1 [I] - 、I) case_4_max = MAX(case_4_max、ARR2 [I] + ARR1 [I] + I) case_4_min =分(case_4_min、ARR2 [ i]が+ ARR1 [i]が+ I) の戻り最大(case_1_max - case_1_min、case_2_max - case_2_min、case_3_max - case_3_min、case_4_max - case_4_min)