leetcode1338. 数组大小减半(贪心算法)
生活随笔
收集整理的這篇文章主要介紹了
leetcode1338. 数组大小减半(贪心算法)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
給你一個整數(shù)數(shù)組 arr。你可以從中選出一個整數(shù)集合,并刪除這些整數(shù)在數(shù)組中的每次出現(xiàn)。
返回 至少 能刪除數(shù)組中的一半整數(shù)的整數(shù)集合的最小大小。
示例 1:
輸入:arr = [3,3,3,3,5,5,5,2,2,7]
輸出:2
解釋:選擇 {3,7} 使得結(jié)果數(shù)組為 [5,5,5,2,2]、長度為 5(原數(shù)組長度的一半)。
大小為 2 的可行集合有 {3,5},{3,2},{5,2}。
選擇 {2,7} 是不可行的,它的結(jié)果數(shù)組為 [3,3,3,3,5,5,5],新數(shù)組長度大于原數(shù)組的二分之一。
代碼
class Solution {public int minSetSize(int[] arr) {Map<Integer,Integer> map=new HashMap<>();double len= Math.ceil(arr.length/2);for(int c:arr)map.put(c,map.getOrDefault(c,0)+1);ArrayList<Integer> arrayList=new ArrayList<>(map.values());//記錄下不同數(shù)字的出現(xiàn)次數(shù)Collections.sort(arrayList, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2.compareTo(o1);}});//從大到小排序次數(shù)int temp=0;for(int i=0;i<arrayList.size();i++)//從大的出現(xiàn)次數(shù)開始減{temp+=arrayList.get(i);if (temp>=len) return i+1;} return 0;} }總結(jié)
以上是生活随笔為你收集整理的leetcode1338. 数组大小减半(贪心算法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到自己的对象是什么意思
- 下一篇: leetcode1433. 检查一个字符