別具一格 讓所有數字都相異的最少加法操作 Min Increment Make Array Unique_LC#945

更新於 2024/06/14閱讀時間約 4 分鐘

題目敘述 Minimum Increment to Make Array Unique

給定一個整數陣列,每回合可以任意挑一個數字進行+1的加法操作。
請問最少需要多少次的+1加法操作,才能讓每個數字都相異?


測試範例

Example 1:

Input: nums = [1,2,2]
Output: 1
Explanation: After 1 move, the array could be [1, 2, 3].

2 調整成 3
需要一次加法操作。​

Example 2:

Input: nums = [3,2,1,2,1,7]
Output: 6
Explanation: After 6 moves, the array could be [3, 4, 1, 2, 5, 7].
It can be shown with 5 or less moves that it is impossible for the array to have all unique values.

1 調整成 2
第一個2 調整成 3
第二個2 調整成 4
3 調整成 5

總共需要六次加法操作。​

約束條件

Constraints:

  • 1 <= nums.length <= 10^5

陣列長度介於1~十萬。

  • 0 <= nums[i] <= 10^5

每個陣列元素介於1~十萬。


觀察

每個整數都要相異,相當於把重複的整數重新mapping到更大的整數
而且為了讓加法操作數目越少越好,重新mapping的距離越近越好,也就是離自己越近越好


這個過程就相當於hash function中的線性探測linear probing,遇到碰撞時,
重新往右側尋找空的格子,每次往右找一格,一直找到空格子為止


演算法 線性探測

維護一張hash table,儲存每個整數對應到的格子點。

最理想的情況是 x -> x,映射到原本的位置,這樣就不需要額外加法。

假如遇到碰撞時,也就是重複的整數,往右側尋找空的格子,找到之後,把原本重複的x映射到右側離自己最近的整數,並且計算對應的+1加法操作次數。


程式碼 線性探測

class Solution(object):
def minIncrementForUnique(self, nums):

# Linear probing to find vacant index in grid
def findVacant(number, grid):

vacantIndex = grid[number]
if vacantIndex == -1:
grid[number] = number
return number

vacantIndex = findVacant(vacantIndex + 1, grid)
grid[number] = vacantIndex
return vacantIndex
# ------------------------------------------------

# index: integer
# value: index of vacant grid
grid = defaultdict(lambda :-1)
incOperation = 0
for number in nums:
vacantIndex = findVacant(number, grid)
incOperation += vacantIndex - number

return incOperation

複雜度分析

時間複雜度:O(n)

線性掃描每個整數,每個整數可以在常數時間內找到空的格子。


空間複雜度: O(n)

需要一個Hash table來儲存每個整數被映射到的格子點。


關鍵知識點

每個整數都要相異,相當於把重複的整數重新mapping到更大的整數

而且為了讓加法操作數目越少越好,重新mapping的距離越近越好,也就是離自己越近越好


這個過程就相當於hash function中的線性探測linear probing,遇到碰撞時,

重新往右側尋找空的格子,每次往右找一格,一直找到空格子為止


Reference

[1] Minimum Increment to Make Array Unique - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Paint House 題目會給定一個成本陣列costs,分別代表每棟房屋粉刷成紅色、藍色、綠色的成本。 請問粉刷所有房屋的最小成本是多少,而且相鄰的房屋不可同一種顏色。
題目敘述 Longest Arithmetic Subsequence of Given Difference 給定一個整數陣列nums,請找出給定公差difference的最長的等差數列的長度是多少?
題目敘述 Solving Questions With Brainpower 給定一個測驗題陣列,每個欄位都是一個pair, 分別記錄測驗題做完可以得到的分數,和需要的冷卻時間 (也就是會有一段時間不能作答接下來的題目)。 請問在最佳的答題策略下,最多可以獲得多少分數?
題目敘述 Sort Colors 給定一個色彩陣列,裡面的顏色包含0紅色,1白色,2藍色。 要求我們透過in-place操作,把色彩陣列依序從左到右排好, 依序出現的是紅色、白色、藍色。
題目敘述 Binary Tree Maximum Path Sum 給定一個二元樹,請找出最大的區間路徑和是多少? 註: 區間路徑和 = 某個節點a -> 某個節點b的路徑節點值總和。
題目敘述 Combination Sum IV 給定一個輸入陣列nums,和目標值target,從nums裡面挑數字去湊出總和 = target,數字可以重複挑選。 請問有多少排列數可以湊出target? 註: 排列數的意思就是位置不同代表兩種不同的方法數。
Paint House 題目會給定一個成本陣列costs,分別代表每棟房屋粉刷成紅色、藍色、綠色的成本。 請問粉刷所有房屋的最小成本是多少,而且相鄰的房屋不可同一種顏色。
題目敘述 Longest Arithmetic Subsequence of Given Difference 給定一個整數陣列nums,請找出給定公差difference的最長的等差數列的長度是多少?
題目敘述 Solving Questions With Brainpower 給定一個測驗題陣列,每個欄位都是一個pair, 分別記錄測驗題做完可以得到的分數,和需要的冷卻時間 (也就是會有一段時間不能作答接下來的題目)。 請問在最佳的答題策略下,最多可以獲得多少分數?
題目敘述 Sort Colors 給定一個色彩陣列,裡面的顏色包含0紅色,1白色,2藍色。 要求我們透過in-place操作,把色彩陣列依序從左到右排好, 依序出現的是紅色、白色、藍色。
題目敘述 Binary Tree Maximum Path Sum 給定一個二元樹,請找出最大的區間路徑和是多少? 註: 區間路徑和 = 某個節點a -> 某個節點b的路徑節點值總和。
題目敘述 Combination Sum IV 給定一個輸入陣列nums,和目標值target,從nums裡面挑數字去湊出總和 = target,數字可以重複挑選。 請問有多少排列數可以湊出target? 註: 排列數的意思就是位置不同代表兩種不同的方法數。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
建立序號或稱流水號情境百百種,今天的情境是,相同類別建立相同的流水編號或序號,這樣的序號如何快速建立呢? 其實用對函數,不用30秒就解決了!!!先花1分鐘看一下教學影片吧,觀看影片之前可以先下載檔案,學中做、做中學效果最好唷。(文末有函數說明) 檔案下載 函數說明 ✍🏾COUNTIF有
Thumbnail
建立序號或稱流水號情境百百種,今天的情境是,不同組別序號就要重新編列,這樣的序號如何快速建立呢? 其實用對函數,不用30秒就解決了!!!先花1分鐘看一下教學影片吧,觀看影片之前可以先下載檔案,學中做、做中學效果最好唷。(文末有函數說明) 檔案下載 函數說明 ✍🏾COUNTIF有條件計數
Thumbnail
幻蝶蔓(Adenia glauca)有著木頭般塊莖,藤蔓狀枝條,枝蔓上的葉子形似蝴蝶,在微風中翩翩起舞,這種別具風格的塊根植物,近年來更成為塊根迷爭先收藏的熱門品種。由於網路上較難找到相關植物的種植資訊,因此,小編對有限的信息作一整理,以便有興趣的朋友參考。
我從來沒有跟學生講過「過程比成績重要」,或是「成績不重要,過程比較重要」的話。因爲,成績就是自己努力過程的展現,大家不會看到你努力準備的過程,但是當你拿到高分的成績,會因爲你的成績而肯定你的努力。所以,不要再有「過程比結果重要」的迷思,應該要把兩者列在同等重要的位置,甚至有時候,結果還會比過程重要!
Thumbnail
魏爾德對電影視覺與風格是頗具野心的,《別擔心親愛的》透露出她能駕馭更複雜的調度、更強烈的特色,但或許就是太著重於此,也或許與電影本身無關的各種事件造成分心,讓她忽略整體劇本的架構與節奏。尤其教人扼腕的是,電影尾聲在聲音及影像的氣勢方面,幾乎要堆疊出喬登.皮爾等級的高潮,但劇情本身的問題讓一切洩了氣。
Thumbnail
「討好所有人」聽起來像是個近乎不可能的事情,但我們卻時刻想這麼做,因為在我們心裡,都覺得受大家喜愛是最好的權衡之術,但真的是這樣嗎? 新文化生態體系 族群劃分的方式改變 星巴克、HBO、新聞不中立 總結
黃偉哲請別用單一數據,掩飾你執政的無能 出動網軍、側翼秀下限,只為了蹭聲量?何必呢? 請問黃偉哲市長,當衛生局跟你說我們的疫苗剩餘率六都最少時,你別急著自嗨,更別出動支持者,側翼及網軍們特別幫你黃偉哲製圖po文,並四處散播讓人誤解的訊息!你這樣不就是最不要臉的網路蟑螂嗎? 1.六都第一疫苗剩餘率
Thumbnail
Netflix從兩個月前每周五更新的日劇《小太郎一個人生活》,是從漫畫改編的真人影劇作品。漫畫改編作品向來有崩壞風險,嘗試看到最新的第7集後(6/11),覺得角色還原度和改編程度都有固定水準,也許不是很主流的題材或超高規格製作,然而作為每周五的輕鬆收尾,個人覺得恰如其分。
座落地點:桃園市 桃園區空間類型:住家房屋狀況:老屋空間坪數:35坪空間格局:1房2廳2衛設計風格:混搭風裝潢費用:300萬台幣 (不含:家具、家電、冷氣)使用建材:超耐磨地板、天然木皮、進口系統板、乳膠漆、鐵件家庭成員:大人x2 本文章內容及圖片均由本專欄作者提供及上載
座落地點:桃園市 桃園區空間類型:住家房屋狀況:老屋空間坪數:35坪空間格局:1房2廳2衛設計風格:混搭風裝潢費用:300萬台幣 (不含:家具、家電、冷氣)使用建材:超耐磨地板、天然木皮、進口系統板、乳膠漆、鐵件家庭成員:大人x2 本文章內容及圖片均由本專欄作者提供及上載,並不代
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
建立序號或稱流水號情境百百種,今天的情境是,相同類別建立相同的流水編號或序號,這樣的序號如何快速建立呢? 其實用對函數,不用30秒就解決了!!!先花1分鐘看一下教學影片吧,觀看影片之前可以先下載檔案,學中做、做中學效果最好唷。(文末有函數說明) 檔案下載 函數說明 ✍🏾COUNTIF有
Thumbnail
建立序號或稱流水號情境百百種,今天的情境是,不同組別序號就要重新編列,這樣的序號如何快速建立呢? 其實用對函數,不用30秒就解決了!!!先花1分鐘看一下教學影片吧,觀看影片之前可以先下載檔案,學中做、做中學效果最好唷。(文末有函數說明) 檔案下載 函數說明 ✍🏾COUNTIF有條件計數
Thumbnail
幻蝶蔓(Adenia glauca)有著木頭般塊莖,藤蔓狀枝條,枝蔓上的葉子形似蝴蝶,在微風中翩翩起舞,這種別具風格的塊根植物,近年來更成為塊根迷爭先收藏的熱門品種。由於網路上較難找到相關植物的種植資訊,因此,小編對有限的信息作一整理,以便有興趣的朋友參考。
我從來沒有跟學生講過「過程比成績重要」,或是「成績不重要,過程比較重要」的話。因爲,成績就是自己努力過程的展現,大家不會看到你努力準備的過程,但是當你拿到高分的成績,會因爲你的成績而肯定你的努力。所以,不要再有「過程比結果重要」的迷思,應該要把兩者列在同等重要的位置,甚至有時候,結果還會比過程重要!
Thumbnail
魏爾德對電影視覺與風格是頗具野心的,《別擔心親愛的》透露出她能駕馭更複雜的調度、更強烈的特色,但或許就是太著重於此,也或許與電影本身無關的各種事件造成分心,讓她忽略整體劇本的架構與節奏。尤其教人扼腕的是,電影尾聲在聲音及影像的氣勢方面,幾乎要堆疊出喬登.皮爾等級的高潮,但劇情本身的問題讓一切洩了氣。
Thumbnail
「討好所有人」聽起來像是個近乎不可能的事情,但我們卻時刻想這麼做,因為在我們心裡,都覺得受大家喜愛是最好的權衡之術,但真的是這樣嗎? 新文化生態體系 族群劃分的方式改變 星巴克、HBO、新聞不中立 總結
黃偉哲請別用單一數據,掩飾你執政的無能 出動網軍、側翼秀下限,只為了蹭聲量?何必呢? 請問黃偉哲市長,當衛生局跟你說我們的疫苗剩餘率六都最少時,你別急著自嗨,更別出動支持者,側翼及網軍們特別幫你黃偉哲製圖po文,並四處散播讓人誤解的訊息!你這樣不就是最不要臉的網路蟑螂嗎? 1.六都第一疫苗剩餘率
Thumbnail
Netflix從兩個月前每周五更新的日劇《小太郎一個人生活》,是從漫畫改編的真人影劇作品。漫畫改編作品向來有崩壞風險,嘗試看到最新的第7集後(6/11),覺得角色還原度和改編程度都有固定水準,也許不是很主流的題材或超高規格製作,然而作為每周五的輕鬆收尾,個人覺得恰如其分。
座落地點:桃園市 桃園區空間類型:住家房屋狀況:老屋空間坪數:35坪空間格局:1房2廳2衛設計風格:混搭風裝潢費用:300萬台幣 (不含:家具、家電、冷氣)使用建材:超耐磨地板、天然木皮、進口系統板、乳膠漆、鐵件家庭成員:大人x2 本文章內容及圖片均由本專欄作者提供及上載
座落地點:桃園市 桃園區空間類型:住家房屋狀況:老屋空間坪數:35坪空間格局:1房2廳2衛設計風格:混搭風裝潢費用:300萬台幣 (不含:家具、家電、冷氣)使用建材:超耐磨地板、天然木皮、進口系統板、乳膠漆、鐵件家庭成員:大人x2 本文章內容及圖片均由本專欄作者提供及上載,並不代