我是靠谱客的博主 优雅鼠标,最近开发中收集的这篇文章主要介绍C++每日一练11-独一无二的出现次数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-number-of-occurrences/在这里插入图片描述
整体思路:
哈希表(unordered_map)+容器(vector)
(1)遍历arr,把元素和元素出现次数加入哈希表(unordered_map)中
(2)遍历unordered_map,把元素次数放到容器(vector)中
(3)调用sort函数排序
(4)遍历排序后的容器(vector),判断相邻位置是否相同
代码:

class Solution {
public:
    bool uniqueOccurrences(vector<int>& arr) {
        unordered_map<int, int> figure_hash;
        for (int &i : arr) {//遍历,并插入
            figure_hash[i]++;
        }
        vector<int> figure_vec;
        for (auto& p : figure_hash) {
            figure_vec.emplace_back(p.second);
        }
        sort(figure_vec.begin(), figure_vec.end());//排序
        for (int n = 0; n < figure_vec.size()-1; n++) {
            if (figure_vec[n] == figure_vec[n + 1]) return false;
        }
        return true;
    }
};

官方解法:

unordered_map+unordered_set
就是在插入unordered_map后,遍历unordered_map将unordered_map的value值放入unordered_set中,因为unordered_set不能存放相同的key,所以最后判断unordered_set的大小是否等于unordered_map的大小即可,效率比我的高很多
代码:

class Solution {
public:
    bool uniqueOccurrences(vector<int>& arr) {
        unordered_map<int, int> occur;
        for (const auto& x: arr) {
            occur[x]++;
        }
        unordered_set<int> times;
        for (const auto& x: occur) {
            times.insert(x.second);
        }
        return times.size() == occur.size();
    }
};

复杂度分析

时间复杂度:O(N)

空间复杂度:O(N)。

最后

以上就是优雅鼠标为你收集整理的C++每日一练11-独一无二的出现次数的全部内容,希望文章能够帮你解决C++每日一练11-独一无二的出现次数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部