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

閱讀時間約 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

85會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
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
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
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
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
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 本文章內容及圖片均由本專欄作者提供及上載,並不代