前往
大廳
主題

LeetCode - 1338. Reduce Array Size to The Half 解題心得

Not In My Back Yard | 2021-11-08 00:00:03 | 巴幣 0 | 人氣 136

題目連結:


題目意譯:
你被給定一個整數陣列 arr。你可以選擇一個整數集合然後在陣列中移除掉這些整數的所有出現之蹤跡。

回傳要將至少一半整數從陣列中被移除掉所需的最小集合之大小。

限制:
1 ≦ arr.length ≦ 10 ^ 5
arr.length 為偶數。
1 ≦ arr[i] ≦ 10 ^ 5



範例測資:
範例 1:
輸入: arr = [3,3,3,3,5,5,5,2,2,7]
輸出: 2
解釋: 選擇 {3,7} 會得到一個新陣列 [5,5,5,2,2] 其大小為 5 (即等於舊陣列的大小之一半)。
另外可能之大小為 2 的集合為 {3,5} 、 {3,2} 、 {5,2}。
選擇集合 {2,7} 是不可行的,因為它將得到新陣列 [3,3,3,3,5,5,5] 其有著大於舊陣列大小之一半的大小。

範例 2:
輸入: arr = [7,7,7,7,7,7]
輸出: 1
解釋: 你唯一可以選的集合為 {7}。這將得到一個新的空陣列。

範例 3:
輸入: arr = [1,9]
輸出: 1

範例 4:
輸入: arr = [1000,1000,3,7]
輸出: 1

範例 5:
輸入: arr = [1,2,3,4,5,6,7,8,9,10]
輸出: 5


解題思維:
先統計 arr 中每種數字的出現次數。然後從出現次數大的開始移除,直到移除總字元數到至少原陣列的一半為止。期間的移除次數即為所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作