LEECODE[独一无二的出现次数]

题目描述

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

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

示例 1:

输入:arr = [1,2,2,1,1,3]
输出:true
解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。

解题思路

1、首先需要对数组进行排序;

2、遍历排序后的数组,统计每个数字出现的频次。使用一个set保持出现过的频次,一旦发现有重复的频次,则返回false。如果都不重复,则返回true;

代码

    bool uniqueOccurrences(vector<int>& arr) {
        if(arr.empty()) return true;

        sort(arr.begin(), arr.end());  
        set<int> counts;
        int last = arr.at(0);
        int count = 1;
        for(int i=1; i!=arr.size(); i++) {
            if(arr.at(i) == last) {
                count++;
            }else {
                if(counts.count(count)) {
                    return false;
                }else {
                    counts.insert(count);
                }
                count = 1;
                last = arr.at(i);
            }
        }
        // remember the last element
        if(counts.count(count)) {
            return false;
        }

        return true;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值