美文网首页算法刷题
LeetCode刷题-独一无二的出现次数

LeetCode刷题-独一无二的出现次数

作者: 小鲨鱼FF | 来源:发表于2021-06-30 07:09 被阅读0次

    前言说明

    算法学习,日常刷题记录。

    题目连接

    独一无二的出现次数

    题目内容

    给你一个整数数组arr,请你帮忙统计数组中每个数的出现次数。

    如果每个数的出现次数都是独一无二的,就返回true;否则返回false。

    示例1:

    输入:arr = [1,2,2,1,1,3]

    输出:true

    解释:在该数组中,1出现了3次,2出现了2次,3只出现了1次。没有两个数的出现次数相同。

    示例2:

    输入:arr = [1,2]

    输出:false

    示例3:

    输入:arr = [-3,0,1,-3,1,1,1,-3,10,0]

    输出:true

    提示:

    1 <= arr.length <= 1000
    -1000 <= arr[i] <= 1000

    分析过程

    定义一个集合map,遍历一次数组arr,利用集合map的key值不会重复的特性来统计各个元素出现的次数,各个元素的次数保存到集合map中。

    定义一个列表list,保存集合map中的元素出现的次数。

    遍历集合map,获取每个元素出现的次数,利用列表list的contains方法来判断后面的元素出现次数是否和前面的元素出现次数相等。

    若当前元素出现的次数没有和其他元素出现的次数相等,那么保存元素出现的次数到列表list中。

    若有一个元素出现的次数和其他元素出现的次数相等了,那么元素出现的次数就不是独一无二了,此时返回false。

    若能遍历完map集合,则证明没有一个元素出现的次数相同,次数是独一无二的,此时返回true。

    解答代码

    class Solution {
        public boolean uniqueOccurrences(int[] arr) {
            // 定义集合map
            Map<Integer, Integer> map = new HashMap<>();
    
            // 遍历数组arr
            for (int e : arr) {
                if (map.containsKey(e)) {
                    // 若集合map中已有数组元素,元素出现次数加1
                    int count = map.get(e);
                    map.put(e, ++count);
                } else {
                    // 若集合map中没有数组元素,推进map集合,元素出现次数为1
                    map.put(e, 1);
                }
            }
    
            // 定义列表list,保存元素出现次数
            List<Integer> list = new ArrayList<>();
    
            // 遍历集合map
            for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
                // 获取元素出现次数
                int value = entry.getValue();
    
                if (list.contains(value)) {
                    // 若有一个元素出现次数相同,那么次数就不是独一无二了
                    return false;
                } else {
                    // 若元素出现次数没有和其他元素出现次数相同,推进列表list
                    list.add(value);
                }
            }
    
            // 若能遍历完集合map,则证明没有一个元素出现次数相同,次数是独一无二的
            return true;
        }
    }
    

    提交结果

    执行用时2ms,时间击败90.97%的用户,内存消耗36.5MB,空间击败35.67%的用户。

    运行结果

    原文链接

    原文链接:独一无二的出现次数

    相关文章

      网友评论

        本文标题:LeetCode刷题-独一无二的出现次数

        本文链接:https://www.haomeiwen.com/subject/sryoeltx.html