leetcode-624.陣列列表中的最大距離

TopWay2Die發表於2024-06-02

陣列列表中的最大距離

給定 m 個陣列,每個陣列都已經按照升序排好序了。現在你需要從兩個不同的陣列中選擇兩個整數(每個陣列選一個)並且計算它們的距離。兩個整數 a 和 b 之間的距離定義為它們差的絕對值 |a-b| 。你的任務就是去找到最大距離

目標

題意中的絕對值 |a-b|等價於選取兩個陣列的最大、最小值相減;由於每個陣列已經排序,進一步等價於\(\max(vec[i][n-1] - vec[j][0], vec[j][m-1] - vec[i][0])\)

直觀想法

\(\min(vec[i][0])\)\(\max(vec[i][n-1])\),但是還需要保障這兩個數不在同一個陣列中,由此產生思路:

  1. 依照 vec[i][0] 的值從小到大進行排序(不直接排序原陣列,而是新申請 index 陣列進行排序),得到 \(index_1\)
  2. 依照 vec[i][n-1] 的值從大到小進行排序 (不直接排序原陣列,而是新申請 index 陣列進行排序),得到 \(index_2\)
  3. 比較兩個 index 陣列的第一個值是否相等,不相等則說明不是同一個陣列,可直接計算得出結果;相等則還需要拿出兩個index陣列的第二個值進行計算比較得出結果

最優解思路

1. 僅僅兩個陣列a, b

很好解決——選擇 \(a_{max} - b_{min}\)\(b_{max} - a_{min}\) 的最大值

2. 三個陣列 a, b, c

透過步驟1,可以得到一個潛在結果 ans;對於 c 的加入,選擇 $ \max(a_{max}, b_{max}) - c_{min}$ 和 $c_{max} - \min(a_{min}, b_{min}) $ 的最大值

3. 進一步範化

已知 m-1 個陣列的答案,而且知道真個陣列的最大、最小值,先加入一個新的陣列,計算得到答案。由此可以得到時間複雜度為\(O(n)\),空間複雜度為\(O(1)\)的方法

相關文章