多邊形最大周長 Find Polygon With Largest Perimeter_Leetcode #2971

更新於 2024/02/15閱讀時間約 5 分鐘

題目敘述

題目會給定我們輸入邊長陣列nums,請問我們從裡面能夠建構出來的多邊形的最大周長是多少

如果無解,返回-1


題目的原文敘述


約束條件

Constraints:

  • 3 <= n <= 10^5

輸入陣列長度nums介於3 ~ 十萬 之間。

  • 1 <= nums[i] <= 10^9

輸入陣列裡面每個元素值介於1 ~ 十億之間。


演算法 不等式 + MaxHeap

在三角形中,我們已經知道 任兩邊之和一定大於第三邊。

也可以說 比較小的邊長累積總和 > 最長的那一邊

image.png

image.png

其實推廣到 k邊形也是通用的。

在k邊形中,比較小的邊長累積總和 = S1 + S2 + ... + Sk-1 > Sk = 最長的那一邊。


怎麼證明呢?

幾何上可以用反證法這樣想,

如果Sk >= S1 + S2 + ... Sk-1

那剩下的那些邊長,就算緊緊地貼著Sk旁邊,也無法構成一個合法的多邊形。

因為Sk太長了,長到剩下的邊全部串在一起也碰不到Sk的另一端


有了這個思路和不等式之後,

我們就建造一個MaxHeap,每次從裡面挑一個當下最長的邊,檢查是否滿足剛剛提到的不等式:

在k邊形中,比較小的邊長累積總和 = S1 + S2 + ... + Sk-1 > Sk = 最長的那一邊。

如果可以,那麼當下的S1, S2, ... ,Sk 就構成一組合法的多邊形,

而且回傳周長S1+S2 + ... + Sk作為答案。


如果不行,就把Sk捨棄,下一輪再從MaxHeap 取出第二大的Sk-1,用同樣的不等式再檢查一次,反覆迭代,一直到最後剩下三個邊的時候,假如還是不行,那就代表無解,回傳-1。(因為三角形已經是邊數最小的多邊形了)


程式碼 不等式 + MaxHeap

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

# Assume we use all side length at first round
perimeter = sum(nums)
heapq._heapify_max(nums)

# Minimal number of sides of polygon is triangle, number of sides = 3
while len(nums) >= 3:

# Pick current max side length from Max Heap
# sk = max side length
Sk = heapq._heappop_max(nums)

# If Side 1 + Side 2 + ... + Side k-1 > max side length
# Then they can form a polygon with perimeter
if perimeter - Sk > Sk:
return perimeter

# If not, try next one
perimeter = perimeter - Sk
# =============================================
# If all fails, then there is No solution
return -1

複雜度分析 不等式 + MaxHeap

間複雜度: O( n log n)

建造MaxHeap花費O(n)

取最大邊長時,需要耗費O(log n)去動態調整MaxHeap,最多會有O(n)個回合,總共耗時O( n log n)。


空間複雜度: O(1)

MaxHeap 是 in-place建造,不耗用額外空間。

其他用到的都是固定尺寸的臨時變數,所需空間為O(1)常數級別。


關鍵知識點

在三角形中,我們已經知道 任兩邊之和一定大於第三邊。

也可以說 比較小的邊長累積總和 > 最長的那一邊


其實推廣到 k邊形也是通用的。

在k邊形中,比較小的邊長累積總和 = S1 + S2 + ... + Sk-1 > Sk = 最長的那一邊。


用不等式去找出最大多邊形的最長周長。


Reference:

[1] Find Polygon With the Largest Perimeter - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目敘述 題目會給我們一個傳統手機的數字鍵盤 和一個數字鍵的輸入字串digits,要求我們列舉出所有輸入字串digits可能對應到的英文字母的排列。 例如輸入digits="23" 那對應到的英文字母排列就是"ad", "ae", "af", "bd", "be", "bf", "cd", "
題目敘述 題目會給定一個猜數字的場景和介面 (包含一個可以呼叫,驗證是否為答案的API guess() function), 要求我們實現猜數字的function guessNumber(int n)。 題目已經事先設定好一個祕密數字,要求我們去找出來那個祕密數字是多少。 就好像小時候
題目敘述 題目給定我們一個輸入陣列nums 要求我們以正、負交叉排列的方式重組陣列,並且必須保持原本的相對順序。 並且以陣列的形式輸出返回答案。 例[5, 1, -2, -3] 重排後為 [5, -2, 1, -3] 題目的原文敘述 測試範例 Example 1: Input:
題目敘述 題目會給定一個陣列nums 和 給定的k值,要求我們找出陣列裡第k大的元素。 題目的原文敘述 測試範例 Example 1: Input: nums = [3,2,1,5,6,4], k = 2 Output: 5 第二大的元素為5​ Example 2: Input:
題目敘述 題目會給我們一個4位數字的數字鎖,還有解鎖的密碼target,和陷阱數字deadends(假如遇到的會鎖會直接卡住,不能在撥動轉盤了)。 預設開始的狀態是0000,請問,最少要撥動轉盤幾次才能解鎖? 題目的原文敘述 測試範例 Example 1: Input: deaden
題目敘述 題目給定一個二維陣列maze代表迷宮的布局, 其中標記為"."的地方代表可通過,標記為"+"代表牆壁不可通過。 每次移動的時候,可以選擇往上、下、左、右移動一格。 請問從出發點entrace開始走的話,抵達迷宮出口最短距離的步數是多少? 如果無解的話,返回-1。 題目的原文敘述
題目敘述 題目會給我們一個傳統手機的數字鍵盤 和一個數字鍵的輸入字串digits,要求我們列舉出所有輸入字串digits可能對應到的英文字母的排列。 例如輸入digits="23" 那對應到的英文字母排列就是"ad", "ae", "af", "bd", "be", "bf", "cd", "
題目敘述 題目會給定一個猜數字的場景和介面 (包含一個可以呼叫,驗證是否為答案的API guess() function), 要求我們實現猜數字的function guessNumber(int n)。 題目已經事先設定好一個祕密數字,要求我們去找出來那個祕密數字是多少。 就好像小時候
題目敘述 題目給定我們一個輸入陣列nums 要求我們以正、負交叉排列的方式重組陣列,並且必須保持原本的相對順序。 並且以陣列的形式輸出返回答案。 例[5, 1, -2, -3] 重排後為 [5, -2, 1, -3] 題目的原文敘述 測試範例 Example 1: Input:
題目敘述 題目會給定一個陣列nums 和 給定的k值,要求我們找出陣列裡第k大的元素。 題目的原文敘述 測試範例 Example 1: Input: nums = [3,2,1,5,6,4], k = 2 Output: 5 第二大的元素為5​ Example 2: Input:
題目敘述 題目會給我們一個4位數字的數字鎖,還有解鎖的密碼target,和陷阱數字deadends(假如遇到的會鎖會直接卡住,不能在撥動轉盤了)。 預設開始的狀態是0000,請問,最少要撥動轉盤幾次才能解鎖? 題目的原文敘述 測試範例 Example 1: Input: deaden
題目敘述 題目給定一個二維陣列maze代表迷宮的布局, 其中標記為"."的地方代表可通過,標記為"+"代表牆壁不可通過。 每次移動的時候,可以選擇往上、下、左、右移動一格。 請問從出發點entrace開始走的話,抵達迷宮出口最短距離的步數是多少? 如果無解的話,返回-1。 題目的原文敘述
你可能也想看
Google News 追蹤
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
▍#013給我一個故事的時間 Podcast ▍愛若是能讓人只行正確之事該有多好?比鬼更驚悚的一種愛《在那邊的鬼》   她與白木相戀,白木是有婦之夫。白木的太太叫作笙子,他們有兩個女兒。 她與白木都是作家,她會把她寫的小說給白木看,她看到自己寫的東西被白木用紅筆否定掉的時候,有一種像是被人看
Thumbnail
被拍到排列整齊的不明飛行物體群,看不太清楚,是編列好的空拍機嗎?可是感覺上又比一般空拍機大上很多!真是猜不透! 你的看法呢? 阿喵這週發布最新的影片,討論關於電影跟現實交錯,未來人穿梭預言的內容,請點擊 : 「電影與現實交錯:未來人“2062V”穿梭至現在到底是真是假?!」 我是捲毛阿喵,也歡迎到我
Thumbnail
地理科的海岸地形、地球科學的海水運動,皆會遇到需繪製「波浪地形圖」的時候,在簡報中該怎麼繪製呢?「曲線圖案」描邊繪製為最速解。在簡報中繪製圖形時,首要的關鍵思維是:先判斷要繪製的圖形,轉折處是圓滑還尖角,圓滑就選曲線繪製,尖角就選手繪多邊形繪製。這個關鍵起手式,能讓你不再圖形按鈕瞎按瞎摸,時間虛耗中
Thumbnail
砸鍋賣鐵這是一句成語描寫砸了鍋去賣廢鐵。表示窮極無聊、不留後路、也比喻把所的都拿出來了。也顯示出一個人窮死到了極致。但是用到現在開店可不就是如此,這家是一家小火鍋店、卻擁有大型連鎖火鍋店氣派。店家知道物價飛漲的時代、 大家為了生活都非常不容易、希望用平易實惠的價格、讓顧客吃到澎湃鍋物。 砸鍋賣鐵相關
Thumbnail
多天區間打底頭肩底型態出現!? 2022/11/07 台股短期走勢預測 & 小台期貨盤前分析。
Thumbnail
一位是小提琴鬼才,一位是大提琴巨星,鋼琴家則是與大提琴家總是「焦孟不離」的組合!
Thumbnail
  在團體動力的活動設計中,我們常常會需要操作種活動,讓學員可以藉由討論與行動,一起完成一個任務,而藉由共同完成任務,來反思當中所經歷的歷程。   「蒙眼多邊形」是我個人很喜歡的一個體驗活動,除了可以探討團隊合作之外,也可以討論領導與被領導、溝通技巧、信任關係等,就看學員的組成與活動開課單位的期待,
Thumbnail
7月26日,美國國務院副國務卿雪蔓(Wendy Sherman)在天津與中國副外長謝鋒進行超過4小時的會談,後又與中國外長王毅會面。 此次會晤被外界視作「習拜會」前哨站,在中美博弈的風雲變幻下,乘載了溝通與磋商的可能意願。然就會談發展觀之,中美的分歧壓力依舊存在。謝鋒直指美方所謂「競爭、合作、對抗」
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
▍#013給我一個故事的時間 Podcast ▍愛若是能讓人只行正確之事該有多好?比鬼更驚悚的一種愛《在那邊的鬼》   她與白木相戀,白木是有婦之夫。白木的太太叫作笙子,他們有兩個女兒。 她與白木都是作家,她會把她寫的小說給白木看,她看到自己寫的東西被白木用紅筆否定掉的時候,有一種像是被人看
Thumbnail
被拍到排列整齊的不明飛行物體群,看不太清楚,是編列好的空拍機嗎?可是感覺上又比一般空拍機大上很多!真是猜不透! 你的看法呢? 阿喵這週發布最新的影片,討論關於電影跟現實交錯,未來人穿梭預言的內容,請點擊 : 「電影與現實交錯:未來人“2062V”穿梭至現在到底是真是假?!」 我是捲毛阿喵,也歡迎到我
Thumbnail
地理科的海岸地形、地球科學的海水運動,皆會遇到需繪製「波浪地形圖」的時候,在簡報中該怎麼繪製呢?「曲線圖案」描邊繪製為最速解。在簡報中繪製圖形時,首要的關鍵思維是:先判斷要繪製的圖形,轉折處是圓滑還尖角,圓滑就選曲線繪製,尖角就選手繪多邊形繪製。這個關鍵起手式,能讓你不再圖形按鈕瞎按瞎摸,時間虛耗中
Thumbnail
砸鍋賣鐵這是一句成語描寫砸了鍋去賣廢鐵。表示窮極無聊、不留後路、也比喻把所的都拿出來了。也顯示出一個人窮死到了極致。但是用到現在開店可不就是如此,這家是一家小火鍋店、卻擁有大型連鎖火鍋店氣派。店家知道物價飛漲的時代、 大家為了生活都非常不容易、希望用平易實惠的價格、讓顧客吃到澎湃鍋物。 砸鍋賣鐵相關
Thumbnail
多天區間打底頭肩底型態出現!? 2022/11/07 台股短期走勢預測 & 小台期貨盤前分析。
Thumbnail
一位是小提琴鬼才,一位是大提琴巨星,鋼琴家則是與大提琴家總是「焦孟不離」的組合!
Thumbnail
  在團體動力的活動設計中,我們常常會需要操作種活動,讓學員可以藉由討論與行動,一起完成一個任務,而藉由共同完成任務,來反思當中所經歷的歷程。   「蒙眼多邊形」是我個人很喜歡的一個體驗活動,除了可以探討團隊合作之外,也可以討論領導與被領導、溝通技巧、信任關係等,就看學員的組成與活動開課單位的期待,
Thumbnail
7月26日,美國國務院副國務卿雪蔓(Wendy Sherman)在天津與中國副外長謝鋒進行超過4小時的會談,後又與中國外長王毅會面。 此次會晤被外界視作「習拜會」前哨站,在中美博弈的風雲變幻下,乘載了溝通與磋商的可能意願。然就會談發展觀之,中美的分歧壓力依舊存在。謝鋒直指美方所謂「競爭、合作、對抗」