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;
    }
};

1207. 独一无二的出现次数
这个效率并不是非常好,因为我们直接调用的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;
    }
};

1207. 独一无二的出现次数
在leetcode上可以看出效率是比较好的

原文链接: https://www.cnblogs.com/wsl-hitsz/p/13891082.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    1207. 独一无二的出现次数

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/397426

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月10日 上午9:32
下一篇 2023年4月10日 上午9:32

相关推荐