思路
利用HashMap统计arr数组中各个数值出现的次数,其中key = 数值, value = 出现次数。
统计结束后将HashMap中所有value(即出现次数)添加到ArrayList中。
随后根据出现次数,将利用Collections.sort()根据value(即出现次数)降序排序。
将数组原始长度的一半记为limit,将数组原始长度记为len,用其减去当前最大的出现次数,判断len是否< limit。
代码
class Solution {
public int minSetSize(int[] arr) {
int len = arr.length, res = 0, limit = len >> 1;
HashMap<Integer, Integer> map = new HashMap<>(len);
for (int num : arr)
map.merge(num, 1, (o_val, n_val) -> o_val + n_val);
ArrayList<Integer> list = new ArrayList<>(map.values());
Collections.sort(list, Comparator.comparingInt(item -> -item));
for (int num : list) {
++res;
if ((len -= num) <= limit)
return res;
}
return -1;
}
}
代码(stream写法)
PS:对于小数据量而言,使用stream会很慢
class Solution {
public int minSetSize(int[] arr) {
int len = arr.length, res = 0, limit = len >> 1;
Map<Integer, Long> map = Arrays.stream(arr).boxed().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
ArrayList<Long> list = new ArrayList<>(map.values());
Collections.sort(list, Comparator.comparingLong(item -> -item));
for (long num : list) {
++res;
if ((len -= num) <= limit)
return res;
}
return -1;
}
}
相关推荐
贪心算法 贪心算法 贪心算法 贪心算法 贪心算法 贪心算法
贪心算法贪心算法贪心算法贪心算法贪心算法贪心算法贪心算法贪心算法贪心算法贪心算法贪心算法
贪心算法 贪心算法的理解 贪心算法的算法 贪心算法的讲解
贪心算法、分治算法和动态规划的区别 贪心算法和动态规划.pdf
贪心算法和动态规划以及分治法的区别? (1) 贪心算法和动态规划.pdf
贪心算法 找零钱 c语言 简洁 绝对无误
贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。贪心算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,省去了为找最优解要穷尽所有可能而...
用贪心算法解单源最短路径问题 明确单源最短路径问题的概念;利用贪心算法解决单源最短路径问题;并通过本例熟悉贪心算法在程序设计中的应用方法。
算法作业-贪心算法论文含实例,可以借鉴其中的算法原理。加深自己的理解
贪心算法 背包问题 c语言 绝对无误 运行成功
算法这么课程的结课论文,以最短路径算法为例描述贪心算法
TSP贪心算法C++ TSP贪心算法C++
贪心算法贪心算法贪心算法贪心算 背包问题背包问题背包问题
贪心算法之最优合并问题
基于最小堆和贪心算法求解多机调度问题基于最小堆和贪心算法求解多机调度问题基于最小堆和贪心算法求解多机调度问题基于最小堆和贪心算法求解多机调度问题基于最小堆和贪心算法求解多机调度问题基于最小堆和贪心算法...
使用贪心算法求解tsp问题,使用vc实现,资源中包含有程序的文档,包含tsp问题说明、贪心算法分析和程序源码。
实验2装箱问题-贪心算法
贪心算法背包问题c语言实现贪心算法背包问题c语言实现贪心算法背包问题c语言实现贪心算法背包问题c语言实现贪心算法背包问题c语言实现贪心算法背包问题c语言实现贪心算法背包问题c语言实现贪心算法背包问题c语言实现...
活动安排问题是利用贪心算法有效求解的很好例子。该问题要求高校的安排一系列争用某一公共资源的活动。贪心算法提供了一个简单、漂亮的方法,使尽可能多的活动可以兼容的使用某一公共资源