思路
利用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;
}
}
相关推荐
贪心算法 贪心算法 贪心算法 贪心算法 贪心算法 贪心算法
贪心算法、分治算法和动态规划的区别 贪心算法、分治算法和动态规划是三种常用的算法设计策略,每种算法都有其特点和应用场景。下面我们将对这三种算法进行详细的比较和分析。 分治算法 分治算法是一种将原问题...
用贪心算法解单源最短路径问题 在计算机科学和信息技术领域中,单源最短路径问题是指从一个源点到其他顶点的最短路径问题。它是一种典型的图论问题,广泛应用于交通网络、通信网络、计算机网络等领域。贪心算法是...
贪心算法是计算机科学中解决问题的一种策略,它通过在每一步选择局部最优解来尝试达到全局最优解。这种算法在很多问题中表现出高效性,尤其是在处理优化问题时。本资料包"贪心算法之最优合并问题.zip"显然是针对贪心...
贪心算法是一种优化策略,它在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的。这种算法通常用于解决复杂问题,通过局部最优解逐步逼近全局最优解。贪心算法并不...
贪心算法和最小生成树 贪心算法是指在解决问题时,总是做出在当前看来最好的选择,以期望能够得到最终的最优解。贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。虽然贪心算法不能对...
在计算机科学与算法设计领域,贪心算法、动态规划和分治法是三种常见的解决问题的方法,它们各自有着独特的策略和适用场景。本文将深入探讨这些算法之间的区别以及它们的优缺点。 首先,贪心算法是一种在每一步选择...
**贪心算法与旅行商问题(TSP)** 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。它并不考虑整个问题的全局最优解,而是每一步都...
贪心算法是数据结构和算法领域中的一种策略,它的核心思想是在每一步决策时都采取在当前状态下最好或最优(即最有利)的选择,希望通过这一系列局部最优的选择,最终达到全局最优的效果。在实验报告中,贪心算法被...
贪心算法是解决这类问题的一种策略,它通过每一步选择局部最优解来期望得到全局最优解。在这个场景中,我们将探讨如何使用Java编程语言,结合贪心算法,来解决背包问题。 首先,我们要理解贪心算法的基本思想。贪心...
在TSP问题中,贪心算法可能会选择每次连接最近未访问的城市,但这种策略并不总是能得出最优解,因为贪心算法没有考虑到全局的最优路径规划。 在VC++环境下,实现TSP问题的贪心算法通常涉及以下步骤: 1. **数据...
### 贪心算法找零钱 #### 一、引言 在计算机科学与数学领域,贪心算法是一种解决问题的方法,它通过选择当前看起来最佳的选项来构建全局最优解。本篇文章将详细介绍如何使用贪心算法解决找零钱问题,并通过C语言...
动态规划和贪心算法的区别 动态规划和贪心算法是两种常用的算法思想,它们之间存在一定的关联和区别。在本文中,我们将详细介绍动态规划和贪心算法的定义、特点、区别和应用场景。 动态规划是一种算法思想,它通过...
经典的贪心算法,实用加常用 贪心算法(Greedy Algorithm)是一种经典的算法,在程序设计中非常常用。贪心算法的思想是,在对问题求解时,总是作出在当前看来是最好的选择。也就是说,不从整体上加以考虑,它所作出...
贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。它不是对所有问题都能找到全局最优解,但在某些特定问题上,贪心算法能有效地得出问题...
### 贪心算法在背包问题中的应用及C语言实现 #### 一、贪心算法简介 贪心算法是一种在每个步骤中都选择局部最优解的策略,希望通过一系列的局部最优选择来达到全局最优解的目的。它适用于某些特定的问题类型,在...
贪心算法和动态规划的区别与联系 贪心算法和动态规划是两种常用的算法设计方法,它们都可以用于解决复杂的问题,但是它们之间存在着一些关键的区别和联系。 首先,让我们了解一下贪心算法和动态规划的定义。 贪心...