1131【leetcode】。絶対値式の最大

次のように内容は次のとおりです。

等しい長さの整数の二つの配列所与の最大値を返します。

|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)

 

おすすめ

転載: www.cnblogs.com/seyjs/p/11302096.html