最小化pair sum的極大值 Minimize Max Pair Sum in Array_Leetcode 1877

閱讀時間約 5 分鐘

這題的題目在這裡:Minimize Maximum Pair Sum in Array

題目敘述

題目會給我們一個整數陣列nums,裡面都是正整數,而且陣列長度保證是偶數

要求我們倆倆將所有整數配對成一組pair,要求我們最小化pair sum的極大值。

舉例,[1,2,3,4]

最佳解為

1,4 配對,pair sum = 5

2,3 配對,pair sum = 5

回傳答案 最小化pair sum的極大值max(5, 5) = 5

註: 其他配對情況,所產生的最小化pair sum的極大值都比5還大


測試範例

Example 1:

Input: nums = [3,5,2,3]
Output: 7
Explanation: The elements can be paired up into pairs (3,3) and (5,2).
The maximum pair sum is max(3+3, 5+2) = max(6, 7) = 7.

Example 2:

Input: nums = [3,5,4,2,4,6]
Output: 8
Explanation: The elements can be paired up into pairs (3,5), (4,4), and (6,2).
The maximum pair sum is max(3+5, 4+4, 6+2) = max(8, 8, 8) = 8.

約束條件

Constraints:

  • n == nums.length
  • 2 <= n <= 10^5
  • n is even.
  • 1 <= nums[i] <= 10^5

演算法

先用比較小的模型來想

假設只有四個數字,a <= b <= c <= d

那麼最佳配對方法為何?

最佳配對方法是: (a, d) 和 (b, c)

max(a+d, b+c) 會是最終答案


這邊用反證法去證明

假如不這麼配呢?


假如(a, c) 和 (b, d)一組

b + d >= a + d (從兩邊等量相加d得到)

b + d >= b + c (從兩邊等量相加b得到)

max(a+c, b+d) >= b + d >= max(a+d, b+c)

所以不是最佳解


假如(a, b) 和 (c, d)一組

c + d >= a + d (從兩邊等量相加d得到)

c + d >= b + c (從兩邊等量相加c得到)

max(a+b, c+d) >= c + d >= max(a+d, b+c)

所以不是最佳解


其他更多數字的情況,可以用類似的手法去推廣證明。

最後歸納可以發現,最佳解的配對方法,就是

最小的數字最大的數字

第二小的數字第二大的數字

第三小的數字第三大的數字

...

依此類推


所以,先把輸入陣列作排序由小到大升序排列。

接著,從頭尾開始配對,往中心前進,過程中,得到的配對最大值,就是整個陣列元素配對的最小化pair sum的極大值


程式碼

class Solution:
 def minPairSum(self, nums: List[int]) -> int:

  # Keep nums sorted in ascending order
  nums.sort()

  left, right = 0, len(nums)-1
  optimal = 0

  # Keep each pair sum as near as possible
  # one from current smallest, one from current largest
  while left < right:

   cur_pair = nums[left] + nums[right]
   optimal = max(optimal, cur_pair)

   left, right = left+1, right-1

  return optimal
  


複雜度分析

時間複雜度: O(n log n)

陣列排序,耗費O(n log n)

迴圈,線性掃描,耗費O(n)

總時間成本,取大的,最後是O( n log n)


空間複雜度: O(1)

所用到的都是固定尺寸的臨時變數,為常數級別O(1)


關鍵知識點

最後歸納可以發現,最佳解的配對方法,就是

最小的數字最大的數字

第二小的數字第二大的數字

第三小的數字第三大的數字

...

依此類推


所以,先把輸入陣列作排序由小到大升序排列。

接著,從頭尾開始配對,往中心前進,過程中,得到的配對最大值,就是整個陣列元素配對的最小化pair sum的極大值


Reference:

[1] Python O(n log n ) by sorting and two-pointers [w/ Comment] - Minimize Maximum Pair Sum in Array - LeetCode

82會員
417Content count
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
這題的題目在這裡:Gray Code 題目敘述 題目會給我們一個bit寬度n,要求我們造出所有格雷編碼。 格雷編碼就是一組二進位編碼,每兩個相鄰的編碼的hamming distance都是1。 如果第一次接觸的讀者,可以參考 Wiki Gray Code
題目會給我們一個字串陣列nums,內容都是二進位字串,要求我們造出一個另一個相等長度,新的二進位字串,而且不和字串陣列nums內的重複。 答案可能有不只一組,回傳合任一組合法的答案皆可。
題目會給我們一個字串s,內容都是由英文小寫字母組成,要求我們計算長度為3的回文子序列有多少個? 舉例,aba者種形式的序列,就是長度為3的回文序列。
題目會給我們一個routes 陣列,裡面都是分別代表每一條公車路線所對應的公車站編號。 題目要求我們計算出,從起點站source到終點站target的最精簡公車路線搭乘次數是幾次? 也就是說,就是在最少轉乘的前提下,旅途中需要搭乘幾條公車路線?
題目會給我們一個pair陣列,裡面都是原本陣列相鄰元素形成的pair,順序已經被打散。 要求我們從pair陣列重建出原本的陣列。 答案可能有不只一組,任選一組回傳即可。
題目會給定我們一個字串s,要求我們計算出同質子字串有幾個? 同質子字串的定義就是子字串內部的字元都相同,例如a, aa, aaa, ... 等等這些就是同質子字串。
這題的題目在這裡:Gray Code 題目敘述 題目會給我們一個bit寬度n,要求我們造出所有格雷編碼。 格雷編碼就是一組二進位編碼,每兩個相鄰的編碼的hamming distance都是1。 如果第一次接觸的讀者,可以參考 Wiki Gray Code
題目會給我們一個字串陣列nums,內容都是二進位字串,要求我們造出一個另一個相等長度,新的二進位字串,而且不和字串陣列nums內的重複。 答案可能有不只一組,回傳合任一組合法的答案皆可。
題目會給我們一個字串s,內容都是由英文小寫字母組成,要求我們計算長度為3的回文子序列有多少個? 舉例,aba者種形式的序列,就是長度為3的回文序列。
題目會給我們一個routes 陣列,裡面都是分別代表每一條公車路線所對應的公車站編號。 題目要求我們計算出,從起點站source到終點站target的最精簡公車路線搭乘次數是幾次? 也就是說,就是在最少轉乘的前提下,旅途中需要搭乘幾條公車路線?
題目會給我們一個pair陣列,裡面都是原本陣列相鄰元素形成的pair,順序已經被打散。 要求我們從pair陣列重建出原本的陣列。 答案可能有不只一組,任選一組回傳即可。
題目會給定我們一個字串s,要求我們計算出同質子字串有幾個? 同質子字串的定義就是子字串內部的字元都相同,例如a, aa, aaa, ... 等等這些就是同質子字串。
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
一個罐頭其中高度為h,底部半徑為r,且 h/r=2 已知 容量V = 1(公升) 找到一組: h(高度) , r(底部半徑) 使得表面積最小 目的: 因表面積最小因此可以讓製造成本降低幫助企業省錢 算式如上 答案我也使用python驗證一下求出數值解 接下來換個角度跟工具
Linux桌面環境很多種,可以參考這篇介紹文章,最後我選擇了gnome與cinnamon。如果你也想安裝cinnamon那就看下去吧。
Thumbnail
許多文獻及研究指出,在經過歷史回測後,單筆投入(Lump Sum)的報酬期望值會勝過定期定額(Dollar Cost Averaging)。 但在實際單筆投入時,投資人往往會害怕投入後市況不好的情況,那麼有什麼方法可以降低這種害怕的心態呢?
Thumbnail
你對你個人的數據被處理的方式,有什麼想法呢?本文章介紹給你數據最小化(Data Minimization)的三大原則:數據適當性 (Data Adequacy),數據相關性 (Data Relevance),數據保留 (Data Retention)。
Thumbnail
講到Amazon(亞馬遜),相信我們或多或少都聽過一個名字--貝佐斯,他就是Amazon的創辦人,然而許多人對貝佐斯仍然相當陌生,因此今天就讓我們來認識這位科技大佬。
Thumbnail
Fedora Workstation 使用快一年至近至近體驗還不錯,最近在想Fedora有沒有可能跟arch那樣從最基礎Linux系統一點一滴安裝自己所需的軟體就好,沒想到Fedora也有提供這種安裝方法。那如何最小化安裝Feodra系統請繼續看下去。
Thumbnail
會談這個主題主要是工作上預計進行Pair Programming的模型來開發,因而蒐集了一些關於Pair Programming這方面的相關概念與執行方向,並整理讓大家共同參考、討論。 🔔還沒成為Potato會員的朋友點這裡加入哦,撰寫文章還能挖礦打造被動收入 🔔 優點 提升程式碼品質 缺點
Thumbnail
本次也是網友投稿,跟上一集一樣是在Pairs派愛族這個交友平台上的詐騙。這平台怎麼比例有點高啊…. 😱 一樣,想分享你的經驗幫助其他人,可以傳到stellafaninthehouse@gmail.com, 有附圖記得碼掉自己個資🙂 首先先謝謝Mandy!Mandy的文字非常溫暖,感覺就是個好女孩
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
一個罐頭其中高度為h,底部半徑為r,且 h/r=2 已知 容量V = 1(公升) 找到一組: h(高度) , r(底部半徑) 使得表面積最小 目的: 因表面積最小因此可以讓製造成本降低幫助企業省錢 算式如上 答案我也使用python驗證一下求出數值解 接下來換個角度跟工具
Linux桌面環境很多種,可以參考這篇介紹文章,最後我選擇了gnome與cinnamon。如果你也想安裝cinnamon那就看下去吧。
Thumbnail
許多文獻及研究指出,在經過歷史回測後,單筆投入(Lump Sum)的報酬期望值會勝過定期定額(Dollar Cost Averaging)。 但在實際單筆投入時,投資人往往會害怕投入後市況不好的情況,那麼有什麼方法可以降低這種害怕的心態呢?
Thumbnail
你對你個人的數據被處理的方式,有什麼想法呢?本文章介紹給你數據最小化(Data Minimization)的三大原則:數據適當性 (Data Adequacy),數據相關性 (Data Relevance),數據保留 (Data Retention)。
Thumbnail
講到Amazon(亞馬遜),相信我們或多或少都聽過一個名字--貝佐斯,他就是Amazon的創辦人,然而許多人對貝佐斯仍然相當陌生,因此今天就讓我們來認識這位科技大佬。
Thumbnail
Fedora Workstation 使用快一年至近至近體驗還不錯,最近在想Fedora有沒有可能跟arch那樣從最基礎Linux系統一點一滴安裝自己所需的軟體就好,沒想到Fedora也有提供這種安裝方法。那如何最小化安裝Feodra系統請繼續看下去。
Thumbnail
會談這個主題主要是工作上預計進行Pair Programming的模型來開發,因而蒐集了一些關於Pair Programming這方面的相關概念與執行方向,並整理讓大家共同參考、討論。 🔔還沒成為Potato會員的朋友點這裡加入哦,撰寫文章還能挖礦打造被動收入 🔔 優點 提升程式碼品質 缺點
Thumbnail
本次也是網友投稿,跟上一集一樣是在Pairs派愛族這個交友平台上的詐騙。這平台怎麼比例有點高啊…. 😱 一樣,想分享你的經驗幫助其他人,可以傳到stellafaninthehouse@gmail.com, 有附圖記得碼掉自己個資🙂 首先先謝謝Mandy!Mandy的文字非常溫暖,感覺就是個好女孩