zoukankan      html  css  js  c++  java
  • [leetCode]1207. 独一无二的出现次数

    csdn:https://blog.csdn.net/renweiyi1487/article/details/109325624

    题目

    链接:https://leetcode-cn.com/problems/unique-number-of-occurrences

    给你一个整数数组 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统计不同元素的出现数目,再次使用哈希表统计不同元素出现次数的数目,如果不同元素出现次数的数目与不同元素数目相同则返回true,否则返回false

    class Solution {
        public boolean uniqueOccurrences(int[] arr) {
            // 1. 使用map统计元素出现次数
            HashMap<Integer, Integer> map = new HashMap<>();
            for (int i = 0; i < arr.length; i++) {
                map.put(arr[i], map.getOrDefault(arr[i],0) + 1);
            }
            // 2. 使用set判断元素出现次数有无重复,如果重复则元素出现次数的数目不等于数字数目
            Set<Integer> set = new HashSet<>();
            for (Map.Entry<Integer, Integer> x : map.entrySet()) {
                set.add(x.getValue());
            }
            return set.size() == map.size();
        }
    }
    

    数组代替哈希

    根据题目提示可以知道数组中元素的大小范围,也可以知道每个元素出现次数的范围,因此可以使用数组代替哈希表。

    class Solution {
        public boolean uniqueOccurrences(int[] arr) {
            // 1.定义一个数组记录arr中的元素出现的次数
            int[] counter = new int[2001];
            for (int i = 0; i < arr.length; i++) {
                counter[arr[i] + 1000]++;
            }
            // 2.一个数字最多出现1000次,定义一个数组记录某个元素出现次数的出现次数
            int[] counter2 = new int[1000];
            for (int i = 0; i < 2001; i++) {
                if (counter[i] != 0)
                    counter2[counter[i] - 1]++;
            }
            // 3. 如果出现次数的次数大于2则返回false
            for (int i = 0; i < 1000; i++) {
                if (counter2[i] >= 2)
                    return false;
            }
            return true;
        }
    }
    
  • 相关阅读:
    HDU 1124 Factorial
    hdu 1690 Bus System
    hdu 1113 Word Amalgamation
    POJ 2482 Stars in Your Window
    hdu 1385 ZOJ 1456 Minimum Transport Cost(经典floyd)
    hdu 1907 John
    VMware 虚拟机 安装 UBuntu 9.10 命令模式转换成窗口模试
    #pragma CODE_SEG __NEAR_SEG NON_BANKED详解
    Ubuntu 下Hadoop 伪分布式 hadoop0.20.2.tar.gz 的安装
    文件拷贝代码以及疑问
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13889161.html
Copyright © 2011-2022 走看看