zoukankan      html  css  js  c++  java
  • 独一无二的出现次数【1207】

    给你一个整数数组 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方式

    思路:

    使用Map统计每个元素的出现个数,把统计好的元素个数的值进行去重,比对map和去重后长度是否相同,相同则返回true
    小技巧:HashMap的key值不存在重复的原理就是使用set的方式去重
    

    代码:

    class Solution {
        public boolean uniqueOccurrences(int[] arr) {
    
            boolean result = false;
            Map<Integer,Integer> map = new HashMap();
    
            for(int i = 0;i < arr.length; i++){
                int key = arr[i];
               // map.put(key, map.getOrDefault(key, 0) + 1);
                if(map.containsKey(key)){
                    Integer value = map.get(key);
                    map.put(key , ++value);
                }else{
                    map.put(key, 1);
                }
            }
            Set<Integer> set = new HashSet();
            for(int key : map.keySet()){
                set.add(map.get(key));
            }
            return map.size() == set.size();
            //return map.size() == new HashSet<>(map.values()).size();
        }
    }
    

    复杂度分析:

    • 时间复杂度O(N),其中 NN 为数组的长度。遍历原始数组需要 O(N) 时间,而遍历中间过程产生的哈希表又需要 O(N) 的时间。

    • 空间复杂度:O(N)。

  • 相关阅读:
    剑指offer(45)扑克牌顺子
    剑指offer(44)单词翻转序列
    剑指offer(43)左旋转字符串
    剑指offer(42)和为S的字符串
    剑指offer(41)和为S的连续正数序列
    剑指offer(40)数组中只出现一次的数字
    剑指offer(39)平衡二叉树
    面试金典——字符串压缩
    LeetCode——恢复二叉搜索树
    LeetCode——修剪二叉搜索树
  • 原文地址:https://www.cnblogs.com/snail-gao/p/13890989.html
Copyright © 2011-2022 走看看