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

    思路一 双哈希表

    class Solution {
    public:
        bool uniqueOccurrences(vector<int>& arr) {
            unordered_map<int, int> map1;
            for(auto num : arr){
                map1[num]++;
            }
            unordered_map<int, int>map2;
            for(auto element : map1){
                map2[element.second]++;
                if (map2[element.second] == 2)
                    return false;
            }
            return true;
        }
    };
    


    这个效率并不是非常好,因为我们直接调用的STL unordered_map 这个数据结构。

    根据数据规模,开数组进行模拟

    在这里,因为数据的规模我们是知道的,所以我们可以直接开一个符合本题目的所有的数组。从直接开数组的消耗其实是比使用库函数的消耗少的。

    class Solution {
    public:
        bool uniqueOccurrences(vector<int>& arr) {
            // 数据的范围是[-1000, 1000] 2001 个数据
            int count[2001] = {0};
            for(auto num : arr){
                count[num+1000]++; 
            }
            bool fre[1001] = {false};        // 这个数组的最大频率为1000
            for (int i = 0; i <= 2000; i++){
                if (count[i]){ 
                    if (fre[count[i]] == false)
                        fre[count[i]] = true;
                    else 
                        return false;
                }    
            }
            return true;
        }
    };
    


    在leetcode上可以看出效率是比较好的

  • 相关阅读:
    ActionContext和ServletActionContext
    1.有Dao为什么还要Service?
    1.DBCP和CP30的区别
    设计模式之单例模式(java实现)
    DOM之练习2
    js之DOM练习题
    动态改变dom结构常用方法
    js 自动类型转换
    定位属性position
    html基础
  • 原文地址:https://www.cnblogs.com/wsl-hitsz/p/13891082.html
Copyright © 2011-2022 走看看