刪除盡可能多的數字 Least Num of Unique after K Remove_Leetcode 1481

閱讀時間約 5 分鐘

題目敘述

題目會給我們一個輸入整數陣列arr,和一個初始化的刪除次數k?

我們可以任意選擇從arr中刪除k個陣列元素,請問最後留下來的數字,最少有幾個不同的數字?

註: 最後不同的數字越少越好


題目的原文敘述


測試範例

Example 1:

Input: arr = [5,5,4], k = 1
Output: 1
Explanation: Remove the single 4, only 5 is left.
刪除一個4

最後只留下5
len( set(5) ) = 1

Example 2:

Input: arr = [4,3,1,1,3,3,2], k = 3
Output: 2
Explanation: Remove 4, 2 and either one of the two 1s or three 3s. 1 and 3 will be left.
刪除一個4
刪除一個2
再任選刪除一個1 或者 一個3
最後者剩下1, 3
len( set(1,3)) = 2

約束條件

Constraints:

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

arr陣列長度介於1~十萬之間。

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

陣列元素都介於1~十億之間。

  • 0 <= k <= arr.length

k值介於0~arr陣列長度 之間。


演算法 Hash table + 出現次數的直方圖 + Greedy


怎麼刪除,才能讓最後不同的數字最少?
有一個基本直覺得想法,先刪除那些烙單或者出現比較少的數字?
為什麼?
因為k值是有限的,必須在k次內盡可能刪掉和別人不一樣的數字


因此,到這邊有了一個Greedy演算法的想法:

先根據輸入陣列建立每個陣列元素的出現次數統計。

再建立一個關於出現次數的直方圖,每一回合刪除時,都從出現次數最少的開始刪

一值到刪除次數用完為止。


程式碼 Hash table + 出現次數的直方圖 + Greedy

class Solution:
def findLeastNumOfUniqueInts(self, arr: List[int], k: int) -> int:

## Dictionary
# key: unique array number
# value: corresponding occurrence
occurrence = Counter(arr)

# n = Counting of unique number in input array
n = len(occurrence)

## Dictionary
# key: occurrence
# value: distribution of occurrence
histogram = Counter( occurrence.values() )

## Greedy stategy
# Remove unique number as many as possible
# Remove number from low occurrence to high occurrence
for occ in range(1, len(arr)+1 ):

if k >= occ * histogram[occ]:
# We can remove all number with current occurrence
# Update available removing count
k -= occ * histogram[occ]

# Update remaining count of unique numbers
n -= histogram[occ]
else:
# We can only remove part of number with current occurrence
# k = 0 after this round

# Update remaining count of unique numbers
return n - k // occ

return n

複雜度分析 Hash table + 出現次數的直方圖 + Greedy

時間複雜度:

​建立字典,和迴圈迭代都是一次線性掃描,皆為O(n)

空間複雜度:

字典長度最大為O(n),最差情況發生再每個數字都不一樣的時候。


關鍵知識點

怎麼刪除,才能讓最後不同的數字最少?
有一個基本直覺得想法,先刪除那些烙單或者出現比較少的數字?
為什麼?
因為k值是有限的,必須在k次內盡可能刪掉和別人不一樣的數字

Reference:

[1] Least Number of Unique Integers after K Removals - LeetCode

avatar-img
88會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目敘述 題目會給定我們一個n值,要求我們列出從0 ~ n 之間,每個整數有幾個bit1,以陣列的形式返回答案。 例如n=3時 因為 0 = 0b 0 1 = 0b 1 2 = 0b 10 3 = 0b 11 輸出答案為[0, 1, 1, 2] 題目的原文敘述 測試範例 E
題目敘述 題目會給我們一個參數k 和 目標值n。 請問我們從1~9內挑k個相異的數字,使得他們的總和為n 的組合數有多少? 挑選時,每個數字必須相異,而且每個數字只能選一次。 題目的原文敘述 測試範例 Example 1: Input: k = 3, n = 7 Output: [
題目敘述 題目會給定我們輸入邊長陣列nums,請問我們從裡面能夠建構出來的多邊形的最大周長是多少? 如果無解,返回-1 題目的原文敘述 約束條件 Constraints: 3 <= n <= 10^5 輸入陣列長度nums介於3 ~ 十萬 之間。 1 <= nums[i] <=
題目敘述 題目會給我們一個傳統手機的數字鍵盤 和一個數字鍵的輸入字串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:
題目敘述 題目會給定我們一個n值,要求我們列出從0 ~ n 之間,每個整數有幾個bit1,以陣列的形式返回答案。 例如n=3時 因為 0 = 0b 0 1 = 0b 1 2 = 0b 10 3 = 0b 11 輸出答案為[0, 1, 1, 2] 題目的原文敘述 測試範例 E
題目敘述 題目會給我們一個參數k 和 目標值n。 請問我們從1~9內挑k個相異的數字,使得他們的總和為n 的組合數有多少? 挑選時,每個數字必須相異,而且每個數字只能選一次。 題目的原文敘述 測試範例 Example 1: Input: k = 3, n = 7 Output: [
題目敘述 題目會給定我們輸入邊長陣列nums,請問我們從裡面能夠建構出來的多邊形的最大周長是多少? 如果無解,返回-1 題目的原文敘述 約束條件 Constraints: 3 <= n <= 10^5 輸入陣列長度nums介於3 ~ 十萬 之間。 1 <= nums[i] <=
題目敘述 題目會給我們一個傳統手機的數字鍵盤 和一個數字鍵的輸入字串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:
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
分享志祺七七影片網址,裡頭有更詳細介紹:https://youtu.be/BjBZUXShMzw 確實,幼兒是人,理應也有人權。 但也必須讓幼兒(甚至是成人)知道,人權必須建立在對他人無傷害的行為之上。
Thumbnail
台北市定古蹟有非常多,中山藏藝所與中山茶書院並存該建築;算是一個建築很特別、老建築下又歷經好幾個機關再利用。所在地在清朝是在台北城城北、建築特色就是紅磚水泥牆二樓建築。說此地是台北市日治時期建築物遺留代表之一,也是許多團體導覽小旅行必遊之地。 中山藏藝所與中山茶書院相關資訊:: 地址: 台北市中山區
Thumbnail
錦珊瑚(Jatropha berlandieri),為大戟科麻瘋樹屬塊根植物。它有一個招牌"大肚腩",外形獨特,很適合製作成盆境樹藝術品。到底如何育種、繁殖?
We help our clients perform the right to be forgotten, a human right that originated from Europe. We claim that everyone should have the right to remo
預計2022-2023準備在華爾街上市的一家國際型網路科技公司集團
預計在美國上市的網路科技公司。
總統令 中 華 民 國 1 1 0 年 6 月 1 6 日 華 總 一 義 字 第 1 1 0 0 0 0 5 5 3 4 1 號 茲刪除中華民國刑法第二百三十九條條文;並修正第二百四十五條條文,公布之。 中華民國刑法刪除第二百三十九條條文;並修正第二百四十五條條文 中華民國 110 年 6 月 1
Thumbnail
Saketh Garuda on Unsplash 政治選完了,人民還在受苦,政治人物視而不見,以為有了「接地氣」,就表示可以與民共苦,了解選民的心情;以為下鄉,聽農民、漁民、工人、各種老百姓抱怨,就認為與人民站在同一線;以為吃著傳統小吃,親民的價格,就認為那就叫做庶民經濟;以為打房可以奏效,認為
Thumbnail
撰寫:黃瀾思 在民進黨立委蔡易餘、陳亭妃等人的共同提案下,立法院於5月8日通過《台灣地區與大陸地區人民關係條例》(下稱《兩岸人民關係條例》)修正草案,要求將條例中的“國家統一前”刪除,修改為“因應國家發展”、“國家管轄領域僅及於台澎金馬與其附屬島嶼時”等字眼。 提案立委蔡易餘在受訪時指出,他另
Thumbnail
對於一個喜歡寫寫東西、放放照片寫心情的我來說,部落格當然有好幾個、IG甚至就有很多亂拍的照片(質量不怎麼樣但自己卻覺得都是好看的照片)或是一些自己看到很喜歡的圖片文字就分享的文等,一個字。。。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
分享志祺七七影片網址,裡頭有更詳細介紹:https://youtu.be/BjBZUXShMzw 確實,幼兒是人,理應也有人權。 但也必須讓幼兒(甚至是成人)知道,人權必須建立在對他人無傷害的行為之上。
Thumbnail
台北市定古蹟有非常多,中山藏藝所與中山茶書院並存該建築;算是一個建築很特別、老建築下又歷經好幾個機關再利用。所在地在清朝是在台北城城北、建築特色就是紅磚水泥牆二樓建築。說此地是台北市日治時期建築物遺留代表之一,也是許多團體導覽小旅行必遊之地。 中山藏藝所與中山茶書院相關資訊:: 地址: 台北市中山區
Thumbnail
錦珊瑚(Jatropha berlandieri),為大戟科麻瘋樹屬塊根植物。它有一個招牌"大肚腩",外形獨特,很適合製作成盆境樹藝術品。到底如何育種、繁殖?
We help our clients perform the right to be forgotten, a human right that originated from Europe. We claim that everyone should have the right to remo
預計2022-2023準備在華爾街上市的一家國際型網路科技公司集團
預計在美國上市的網路科技公司。
總統令 中 華 民 國 1 1 0 年 6 月 1 6 日 華 總 一 義 字 第 1 1 0 0 0 0 5 5 3 4 1 號 茲刪除中華民國刑法第二百三十九條條文;並修正第二百四十五條條文,公布之。 中華民國刑法刪除第二百三十九條條文;並修正第二百四十五條條文 中華民國 110 年 6 月 1
Thumbnail
Saketh Garuda on Unsplash 政治選完了,人民還在受苦,政治人物視而不見,以為有了「接地氣」,就表示可以與民共苦,了解選民的心情;以為下鄉,聽農民、漁民、工人、各種老百姓抱怨,就認為與人民站在同一線;以為吃著傳統小吃,親民的價格,就認為那就叫做庶民經濟;以為打房可以奏效,認為
Thumbnail
撰寫:黃瀾思 在民進黨立委蔡易餘、陳亭妃等人的共同提案下,立法院於5月8日通過《台灣地區與大陸地區人民關係條例》(下稱《兩岸人民關係條例》)修正草案,要求將條例中的“國家統一前”刪除,修改為“因應國家發展”、“國家管轄領域僅及於台澎金馬與其附屬島嶼時”等字眼。 提案立委蔡易餘在受訪時指出,他另
Thumbnail
對於一個喜歡寫寫東西、放放照片寫心情的我來說,部落格當然有好幾個、IG甚至就有很多亂拍的照片(質量不怎麼樣但自己卻覺得都是好看的照片)或是一些自己看到很喜歡的圖片文字就分享的文等,一個字。。。