`
JonyUabka
  • 浏览: 13276 次
  • 性别: Icon_minigender_1
  • 来自: 东营
社区版块
存档分类
最新评论

hashmpa 贪心算法

阅读更多

https://leetcode-cn.com/problems/reduce-array-size-to-the-half/solution/java-hashmappai-xu-tan-xin-by-gfu/

 

思路

利用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

    贪心算法、分治算法和动态规划的区别 贪心算法、分治算法和动态规划是三种常用的算法设计策略,每种算法都有其特点和应用场景。下面我们将对这三种算法进行详细的比较和分析。 分治算法 分治算法是一种将原问题...

    用贪心算法解单源最短路径问题

    用贪心算法解单源最短路径问题 在计算机科学和信息技术领域中,单源最短路径问题是指从一个源点到其他顶点的最短路径问题。它是一种典型的图论问题,广泛应用于交通网络、通信网络、计算机网络等领域。贪心算法是...

    贪心算法之最优合并问题.zip

    贪心算法是计算机科学中解决问题的一种策略,它通过在每一步选择局部最优解来尝试达到全局最优解。这种算法在很多问题中表现出高效性,尤其是在处理优化问题时。本资料包"贪心算法之最优合并问题.zip"显然是针对贪心...

    贪心算法 贪心 算法 贪心的算法

    贪心算法是一种优化策略,它在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的。这种算法通常用于解决复杂问题,通过局部最优解逐步逼近全局最优解。贪心算法并不...

    贪心算法,最小生成树

    贪心算法和最小生成树 贪心算法是指在解决问题时,总是做出在当前看来最好的选择,以期望能够得到最终的最优解。贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。虽然贪心算法不能对...

    贪心算法和动态规划以及分治法的区别? (1) 贪心算法和动态规划.pdf

    在计算机科学与算法设计领域,贪心算法、动态规划和分治法是三种常见的解决问题的方法,它们各自有着独特的策略和适用场景。本文将深入探讨这些算法之间的区别以及它们的优缺点。 首先,贪心算法是一种在每一步选择...

    tsp问题贪心算法求解

    **贪心算法与旅行商问题(TSP)** 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。它并不考虑整个问题的全局最优解,而是每一步都...

    数据结构中贪心算法实验报告

    贪心算法是数据结构和算法领域中的一种策略,它的核心思想是在每一步决策时都采取在当前状态下最好或最优(即最有利)的选择,希望通过这一系列局部最优的选择,最终达到全局最优的效果。在实验报告中,贪心算法被...

    用贪心算法实现背包问题

    贪心算法是解决这类问题的一种策略,它通过每一步选择局部最优解来期望得到全局最优解。在这个场景中,我们将探讨如何使用Java编程语言,结合贪心算法,来解决背包问题。 首先,我们要理解贪心算法的基本思想。贪心...

    贪心算法求解tsp(旅行商问题)

    在TSP问题中,贪心算法可能会选择每次连接最近未访问的城市,但这种策略并不总是能得出最优解,因为贪心算法没有考虑到全局的最优路径规划。 在VC++环境下,实现TSP问题的贪心算法通常涉及以下步骤: 1. **数据...

    贪心算法 找零钱

    ### 贪心算法找零钱 #### 一、引言 在计算机科学与数学领域,贪心算法是一种解决问题的方法,它通过选择当前看起来最佳的选项来构建全局最优解。本篇文章将详细介绍如何使用贪心算法解决找零钱问题,并通过C语言...

    动态规划和贪心算法的区别 贪心算法和动态规划.pdf

    动态规划和贪心算法的区别 动态规划和贪心算法是两种常用的算法思想,它们之间存在一定的关联和区别。在本文中,我们将详细介绍动态规划和贪心算法的定义、特点、区别和应用场景。 动态规划是一种算法思想,它通过...

    经典的贪心算法,实用加常用

    经典的贪心算法,实用加常用 贪心算法(Greedy Algorithm)是一种经典的算法,在程序设计中非常常用。贪心算法的思想是,在对问题求解时,总是作出在当前看来是最好的选择。也就是说,不从整体上加以考虑,它所作出...

    贪心算法算法分析设计

    贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。它不是对所有问题都能找到全局最优解,但在某些特定问题上,贪心算法能有效地得出问题...

    贪心算法 背包问题 c语言

    ### 贪心算法在背包问题中的应用及C语言实现 #### 一、贪心算法简介 贪心算法是一种在每个步骤中都选择局部最优解的策略,希望通过一系列的局部最优选择来达到全局最优解的目的。它适用于某些特定的问题类型,在...

    贪心算法和动态规划的区别与联系 贪心算法和动态规划.pdf

    贪心算法和动态规划的区别与联系 贪心算法和动态规划是两种常用的算法设计方法,它们都可以用于解决复杂的问题,但是它们之间存在着一些关键的区别和联系。 首先,让我们了解一下贪心算法和动态规划的定义。 贪心...

Global site tag (gtag.js) - Google Analytics