補闕拾遺 補上缺少的數字 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


86會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目敘述 IPO 新企業準備上市增資,初始資本是w,可以參加k個專案。 每個專案的獲利和投入成本分別記錄在profits和capital陣列。 請問,在盡可能增資的情況下,最後最大的總資本是多少?
題目敘述 Triangle 題目會給我們一個三角形的二維陣列triangle ,每個元素分別代表每個格子的成本,請問我們從最頂端到底部的下墜路徑的最小成本總和是多少? 每次下墜到下一排的時候,可以有兩種選擇: 1.往左下方的格子點移動。 2.往右下方的格子點移動。 測試範例 Examp
題目敘述 Minimum Increment to Make Array Unique 給定一個整數陣列,每回合可以任意挑一個數字進行+1的加法操作。 請問最少需要多少次的+1加法操作,才能讓每個數字都相異?
Paint House 題目會給定一個成本陣列costs,分別代表每棟房屋粉刷成紅色、藍色、綠色的成本。 請問粉刷所有房屋的最小成本是多少,而且相鄰的房屋不可同一種顏色。
題目敘述 Longest Arithmetic Subsequence of Given Difference 給定一個整數陣列nums,請找出給定公差difference的最長的等差數列的長度是多少?
題目敘述 Solving Questions With Brainpower 給定一個測驗題陣列,每個欄位都是一個pair, 分別記錄測驗題做完可以得到的分數,和需要的冷卻時間 (也就是會有一段時間不能作答接下來的題目)。 請問在最佳的答題策略下,最多可以獲得多少分數?
題目敘述 IPO 新企業準備上市增資,初始資本是w,可以參加k個專案。 每個專案的獲利和投入成本分別記錄在profits和capital陣列。 請問,在盡可能增資的情況下,最後最大的總資本是多少?
題目敘述 Triangle 題目會給我們一個三角形的二維陣列triangle ,每個元素分別代表每個格子的成本,請問我們從最頂端到底部的下墜路徑的最小成本總和是多少? 每次下墜到下一排的時候,可以有兩種選擇: 1.往左下方的格子點移動。 2.往右下方的格子點移動。 測試範例 Examp
題目敘述 Minimum Increment to Make Array Unique 給定一個整數陣列,每回合可以任意挑一個數字進行+1的加法操作。 請問最少需要多少次的+1加法操作,才能讓每個數字都相異?
Paint House 題目會給定一個成本陣列costs,分別代表每棟房屋粉刷成紅色、藍色、綠色的成本。 請問粉刷所有房屋的最小成本是多少,而且相鄰的房屋不可同一種顏色。
題目敘述 Longest Arithmetic Subsequence of Given Difference 給定一個整數陣列nums,請找出給定公差difference的最長的等差數列的長度是多少?
題目敘述 Solving Questions With Brainpower 給定一個測驗題陣列,每個欄位都是一個pair, 分別記錄測驗題做完可以得到的分數,和需要的冷卻時間 (也就是會有一段時間不能作答接下來的題目)。 請問在最佳的答題策略下,最多可以獲得多少分數?
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
愛德華和莎拉竟然不惜出這種賤招也不想讓新人全部合格!
鋅是人體不可或缺的礦物質,擔任著多種生理功能。然而,如何確保足夠的鋅攝取量卻是不少人關心的問題。本文將探討從日常飲食和補充品中獲取足夠鋅的方法,並提供一些實用建議。
維生素D與人體的免疫力密切相關,因此在經歷疫情肆虐後,大家都越來越重視維生素的補充,但市面上的維生素D產品選擇眾多,如何挑選優質且適合自己的產品?今天要跟大家分享3款維生素D推薦,希望能幫助大家做出正確的決定。
Thumbnail
董事會的主要職能之一是監督經營團隊,處理可能涉及董事會成員和股東之間利益衝突的情況,包括監督關係人交易,以防止公司資產被濫用或侵佔等情況。根據公司法第206條的要求,董事會不僅需要決議適用股東會的利益迴避制度,還進一步對此進行了規範。
Thumbnail
綜合維他命是綜合補充人體所需營養素的保健食品,對經常飲食不均衡的現代人來說,非常推薦補充,但市面上的綜合維他命選擇眾多,該如何挑選真正有效的產品呢?今天為大家介紹的是綜合維他命推薦3大原則,如果你也想吃綜合維他命,但不知道怎麼買,就一起看下去吧!
Thumbnail
去年七月時,本來幫女兒們規劃要出去家庭旅遊,沒想到大女兒在某天晚上突然發高燒,燒到40.2度,沒有辦法退燒,只好送成大急診。在急診時等待檢驗結果,醫生告知大女兒是陽性,確診covid-19。 由於急診室只能一個人陪診,而且等待時間漫長,我便把大女兒交給她爸爸,而我自己則到室外的家屬等待區處理相關事宜
Thumbnail
膠原蛋白(Collagen)從18歲到達巔峰後,青春無敵保護罩就開始流失,尤其到了40歲後,更是以每年1%失速列車般開往山谷下衝,人生起落,由膠原蛋白可見更迭。 淺談膠原蛋白是什麼? 膠原蛋白是哺乳動物中含量最豐富的蛋白質,約占30%,膠原蛋白家族包括28種類型,共同特徵就是存在一個三螺旋的結構,也
Thumbnail
《孤兒怨2:最黑暗的過去》以續集前傳的形式,將當年嚇壞眾人的小女孩帶回大銀幕,原以為只是交代惡女艾斯特的出身起源,沒想到編劇的生花妙筆,讓前傳有了斜槓劇情的絕妙反轉,也拍出了經典恐怖電影的新趣味,一部嚇壞你,又同時能笑死你的假面母女火花四射大對決即將席捲全台,2022年8月26日等你呼朋引友來解謎!
Thumbnail
台灣目前每日確診人數萬人起跳,防疫保單也因為申請過量一一停售,到6月份只剩1張防疫保單可買,且只提供續保戶,不承接新戶。如果沒有購買防疫保單,還有哪些確診補助可以申請呢?確診補助金有多少?隔離者或照顧者同樣也有保障嗎?來看以下的資訊整理。
Thumbnail
一般運動漫畫大約只有努力努力再努力這種正面向上的能力,但《失憶投捕》這部漫畫裡頭:「羨慕、甚至可以說是忌妒」把這種情緒能量更是比其他作品還要更強上數倍,但也拜這種攻擊性的力量所賜,當「牆」這樣一直反覆不停的出現的意象,打破它的瞬間也更加具有震撼力。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
愛德華和莎拉竟然不惜出這種賤招也不想讓新人全部合格!
鋅是人體不可或缺的礦物質,擔任著多種生理功能。然而,如何確保足夠的鋅攝取量卻是不少人關心的問題。本文將探討從日常飲食和補充品中獲取足夠鋅的方法,並提供一些實用建議。
維生素D與人體的免疫力密切相關,因此在經歷疫情肆虐後,大家都越來越重視維生素的補充,但市面上的維生素D產品選擇眾多,如何挑選優質且適合自己的產品?今天要跟大家分享3款維生素D推薦,希望能幫助大家做出正確的決定。
Thumbnail
董事會的主要職能之一是監督經營團隊,處理可能涉及董事會成員和股東之間利益衝突的情況,包括監督關係人交易,以防止公司資產被濫用或侵佔等情況。根據公司法第206條的要求,董事會不僅需要決議適用股東會的利益迴避制度,還進一步對此進行了規範。
Thumbnail
綜合維他命是綜合補充人體所需營養素的保健食品,對經常飲食不均衡的現代人來說,非常推薦補充,但市面上的綜合維他命選擇眾多,該如何挑選真正有效的產品呢?今天為大家介紹的是綜合維他命推薦3大原則,如果你也想吃綜合維他命,但不知道怎麼買,就一起看下去吧!
Thumbnail
去年七月時,本來幫女兒們規劃要出去家庭旅遊,沒想到大女兒在某天晚上突然發高燒,燒到40.2度,沒有辦法退燒,只好送成大急診。在急診時等待檢驗結果,醫生告知大女兒是陽性,確診covid-19。 由於急診室只能一個人陪診,而且等待時間漫長,我便把大女兒交給她爸爸,而我自己則到室外的家屬等待區處理相關事宜
Thumbnail
膠原蛋白(Collagen)從18歲到達巔峰後,青春無敵保護罩就開始流失,尤其到了40歲後,更是以每年1%失速列車般開往山谷下衝,人生起落,由膠原蛋白可見更迭。 淺談膠原蛋白是什麼? 膠原蛋白是哺乳動物中含量最豐富的蛋白質,約占30%,膠原蛋白家族包括28種類型,共同特徵就是存在一個三螺旋的結構,也
Thumbnail
《孤兒怨2:最黑暗的過去》以續集前傳的形式,將當年嚇壞眾人的小女孩帶回大銀幕,原以為只是交代惡女艾斯特的出身起源,沒想到編劇的生花妙筆,讓前傳有了斜槓劇情的絕妙反轉,也拍出了經典恐怖電影的新趣味,一部嚇壞你,又同時能笑死你的假面母女火花四射大對決即將席捲全台,2022年8月26日等你呼朋引友來解謎!
Thumbnail
台灣目前每日確診人數萬人起跳,防疫保單也因為申請過量一一停售,到6月份只剩1張防疫保單可買,且只提供續保戶,不承接新戶。如果沒有購買防疫保單,還有哪些確診補助可以申請呢?確診補助金有多少?隔離者或照顧者同樣也有保障嗎?來看以下的資訊整理。
Thumbnail
一般運動漫畫大約只有努力努力再努力這種正面向上的能力,但《失憶投捕》這部漫畫裡頭:「羨慕、甚至可以說是忌妒」把這種情緒能量更是比其他作品還要更強上數倍,但也拜這種攻擊性的力量所賜,當「牆」這樣一直反覆不停的出現的意象,打破它的瞬間也更加具有震撼力。