補闕拾遺 補上缺少的數字 Patch Array_Leetcode #330 Greedy策略

閱讀時間約 5 分鐘

題目敘述 Patching Array

題目給定一個整數陣列,
請問還要補上多少個數字,才能用這些數字的和拼湊出所有1~n的整數


測試範例

Example 1:

Input: nums = [1,3], n = 6
Output: 1
Explanation:
Combinations of nums are [1], [3], [1,3], which form possible sums of: 1, 3, 4.
Now if we add/patch 2 to nums, the combinations are: [1], [2], [3], [1,3], [2,3], [1,2,3].
Possible sums are 1, 2, 3, 4, 5, 6, which now covers the range [1, 6].
So we only need 1 patch.

[1,2,3]可以拼出1~6地所以整數
1 = 1
2 = 2
3 = 3
4 = 3+1
5 = 3+2
6 = 3+2+1


Example 2:

Input: nums = [1,5,10], n = 20
Output: 2
Explanation: The two patches can be [2, 4].

[1,2,4,5,10] 可以拼出1~20地所以整數
1 = 1
2 = 2
3 = 2+1
4 = 4
5 = 5
6 = 5+1
7 = 5+2
8 = 5+2+1
9 = 5+4
10 = 10
11 = 10+1
12 = 10+2
13 = 10+2+1
14 = 10+4
15 = 10+4+1
16 = 10+5+1
17 = 10+5+2
18 = 10+5+2+1
19 = 10+5+4
20 = 10+5+4+1

Example 3:

Input: nums = [1,2,2], n = 5
Output: 0

[1,2,2] 可以拼出1~5地所以整數
1 = 1
2 = 2
3 = 2+1
4 = 2+2

觀察 湊整數的區間延伸

假設本來已經能湊出[1, x)的區間。

遇到新的數字y,假如y <= x 那麼可以延伸區間到[1, x+y)

只要把已知的方法再額外加上y即可。


遇到新的數字y,假如y > x ,代表需要補上一個新的數字x

補上新數字之後,可以延伸區間到[1, x+x) = [1, 2x)

接著再依循同樣的檢查邏輯,看看y 現在是 <= 2x 還是 > 2x。


最終,假如區間的終點x,已經大於n,代表我們可以用現有的數字做加法,湊出[1, n]區間內的所有整數。


示意圖

raw-image

演算法 盡可能的延伸區間

承接觀察點的思考。

每遇到一個整數y,先確認是落在[1, x)區間內還是區間外。

落在區間內,就用現在這個整數去延伸區間到[1, x+y)

落在區間外,則補上一個整數x,延伸區間到[1, x+x) = [1, 2x)

接著再用同樣的規則檢查整數y

反覆迭代,一直到區間[1,x)能夠覆蓋n值為止。


程式碼 盡可能的延伸區間

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

# counting of patch, upper bound of coverage
patchCount, limit = 0, 1

# Initialization: we can cover interval [1, limit)

# Array index
index = 0

# Push limit to cross over n with minimal count of patches
while limit <= n:

if index < len(nums) and nums[index] <= limit:

# Now we can cover interval [1, limit + nums[index])
limit += nums[index]
index += 1

else:
# Current number is out of interval [1, limit)
# patch 'limit' into array, now we can cover interval [1, limit + limit) = [1, 2*limit]
patchCount += 1
limit *= 2

return patchCount

複雜度分析

時間複雜度: O( len(nums) + log n)

掃描每個陣列雲素耗費O( len(nums) )

延伸區間,直到覆蓋n為止,區間成長速度為兩倍,所需時間為O( log n)

空間複雜度: O(1)

所用到的都是固定尺寸的臨時變數,所需空間為O(1)


關鍵知識點

盡可能用最少的補充次數去延伸區間。(相當於貪心Greedy策略)


Reference:

[1] Patch Array


52會員
339內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
【影宅】第179-180話分析-螳螂捕蟬,黃雀在後愛德華和莎拉竟然不惜出這種賤招也不想讓新人全部合格!
Thumbnail
avatar
雲緋gring
2023-11-30
如何確保每日足夠的鋅攝取量?淺談日常飲食和補充品選擇鋅是人體不可或缺的礦物質,擔任著多種生理功能。然而,如何確保足夠的鋅攝取量卻是不少人關心的問題。本文將探討從日常飲食和補充品中獲取足夠鋅的方法,並提供一些實用建議。
avatar
湯圓媽
2023-10-18
3款維生素D推薦|完整解析產品特色,帶你正確補充陽光維生素維生素D與人體的免疫力密切相關,因此在經歷疫情肆虐後,大家都越來越重視維生素的補充,但市面上的維生素D產品選擇眾多,如何挑選優質且適合自己的產品?今天要跟大家分享3款維生素D推薦,希望能幫助大家做出正確的決定。
avatar
湯圓媽
2023-09-15
知識點分享|議案與董事有利害關係,董事卻未在董事會說明利害關係,該如何補救?董事會的主要職能之一是監督經營團隊,處理可能涉及董事會成員和股東之間利益衝突的情況,包括監督關係人交易,以防止公司資產被濫用或侵佔等情況。根據公司法第206條的要求,董事會不僅需要決議適用股東會的利益迴避制度,還進一步對此進行了規範。
Thumbnail
avatar
投行大叔
2023-08-29
綜合維他命推薦怎麼選?3個挑選原則一次看,正確補充才有效!綜合維他命是綜合補充人體所需營養素的保健食品,對經常飲食不均衡的現代人來說,非常推薦補充,但市面上的綜合維他命選擇眾多,該如何挑選真正有效的產品呢?今天為大家介紹的是綜合維他命推薦3大原則,如果你也想吃綜合維他命,但不知道怎麼買,就一起看下去吧!
Thumbnail
avatar
湯圓媽
2023-04-24
領錢,彌補一點確診的憂鬱心情去年七月時,本來幫女兒們規劃要出去家庭旅遊,沒想到大女兒在某天晚上突然發高燒,燒到40.2度,沒有辦法退燒,只好送成大急診。在急診時等待檢驗結果,醫生告知大女兒是陽性,確診covid-19。 由於急診室只能一個人陪診,而且等待時間漫長,我便把大女兒交給她爸爸,而我自己則到室外的家屬等待區處理相關事宜
Thumbnail
avatar
藍月琉璃
2023-02-03
吃膠原蛋白有效嗎?正確補充膠原蛋白讓「美麗」與「活力」都青春無敵膠原蛋白(Collagen)從18歲到達巔峰後,青春無敵保護罩就開始流失,尤其到了40歲後,更是以每年1%失速列車般開往山谷下衝,人生起落,由膠原蛋白可見更迭。 淺談膠原蛋白是什麼? 膠原蛋白是哺乳動物中含量最豐富的蛋白質,約占30%,膠原蛋白家族包括28種類型,共同特徵就是存在一個三螺旋的結構,也
Thumbnail
avatar
營養健康研究所
2022-12-28
《孤兒怨 2:最黑暗的過去》--- 螳螂捕蟬黃雀在後,知人知面不知心...《孤兒怨2:最黑暗的過去》以續集前傳的形式,將當年嚇壞眾人的小女孩帶回大銀幕,原以為只是交代惡女艾斯特的出身起源,沒想到編劇的生花妙筆,讓前傳有了斜槓劇情的絕妙反轉,也拍出了經典恐怖電影的新趣味,一部嚇壞你,又同時能笑死你的假面母女火花四射大對決即將席捲全台,2022年8月26日等你呼朋引友來解謎!
Thumbnail
avatar
輕煙飄過
2022-08-24
確診補助》確診補助懶人包!2補助、3保險一次看台灣目前每日確診人數萬人起跳,防疫保單也因為申請過量一一停售,到6月份只剩1張防疫保單可買,且只提供續保戶,不承接新戶。如果沒有購買防疫保單,還有哪些確診補助可以申請呢?確診補助金有多少?隔離者或照顧者同樣也有保障嗎?來看以下的資訊整理。
Thumbnail
avatar
Zoe
2022-06-30
曾做過的努力不會背叛你——《失憶投捕/忘卻Battery》一般運動漫畫大約只有努力努力再努力這種正面向上的能力,但《失憶投捕》這部漫畫裡頭:「羨慕、甚至可以說是忌妒」把這種情緒能量更是比其他作品還要更強上數倍,但也拜這種攻擊性的力量所賜,當「牆」這樣一直反覆不停的出現的意象,打破它的瞬間也更加具有震撼力。
Thumbnail
avatar
涼柚
2021-08-06