前往
大廳
主題

LeetCode - 2616. Minimize the Maximum Difference of Pairs 解題心得

Not In My Back Yard | 2024-03-20 12:00:01 | 巴幣 0 | 人氣 35

題目連結:


題目意譯:
你被給定一個索引值從 0 開始的整數陣列 nums,以及一個整數 p。從 nums 中找出 p 對索引值使得每一對索引值對應的數字之差值最大者是盡可能地小的。同時,請確保沒有索引值重複出現在這 p 對之中。

注意到對於包含著索引值 i 和 j 的一對索引值,這對的對應數字差值為 |nums[i] - nums[j]|,其中 |x| 代表著 x 的絕對值。

回傳在所有可能的 p 對索引值中最大差值的最小值為何。我們定義一個空集合的最大值為 0。

限制:
1 ≦ nums.length ≦ 10 ^ 5
0 ≦ nums[i] ≦ 10 ^ 9
0 ≦ p ≦ (nums.length)/2



範例測資:
範例 1:
輸入: nums = [10,1,2,7,1,3], p = 2
輸出: 1
解釋: 第一對為索引值 1 和 4,而第二對為索引值 2 和 5。
最大差值為 max(|nums[1] - nums[5]|, |nums[2] - nums[5]|) = max(0, 1) = 1。因此,我們回傳 1。

範例 2:
輸入: nums = [4,2,1,2], p = 1
輸出: 0
解釋: 讓索引值 1 和 3 形成一對。該對之差值為 |2 - 2| = 0,其為我們可以得到最小值。


解題思維:
又是一題可以對「答案」進行二分搜尋法(Binary Search)的題目,如這題。簡單來說,先把 nums 中所有數字由小排到大(索引值不能重複出現,則我們可以直接當作從 nums 中選元素出來即可)。接著一直猜最大差值是多少(假設為 M),然後掃過排序後的 nums 可不可以挑至少 p 對數字。如果可以,則我們「可能」可以猜大一點的 Μ 值;反之則應當猜小一點的 M 值。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作