Leetcode:1201.独一无二的出现次数

独一无二的出现次数

问题描述:给一个整数数组arr,统计数组中每个数的出现次数。若每个数的出现次数都是独一无二的,返回true;否则返回false;

解决方案:使用哈希表:

首先使用哈希表记下每个数字的出现次数,然后再利用新的哈希表,统计不同的出现次数的数目。如果不同的出现的次数等于不同的数字,则返回true,否则返回false。

哈希表相关知识
1. 概念:
         哈希表又叫散列表,思路是,设存储的元素个数为n,设置一个长度为m(m>=n)的里安尼西内存单元,以每个元素的关键字k(i),(0<=i<=n-1)为自变量,通过哈希函数h{k(i)}将k(i)映射到内存的地质单元,,并且把该地址存储在这个单元中,也称为哈希地址,把如此构造成的线性表组合成为哈希表。
2. 构造方法:
       (1)、直接选址:
       (2)、除留余数法:
       (3)、数字分析法:
3. 冲突解决方法:
 <1>:开放选址法:
     (1)、开放选址法:
     (2)、线性探测法:
     (3)、平方探测法:
 <2>:;拉链法:

哈希表不同解决冲突方法的平均查找长度(PPY)

本问题相关代码:

struct unordered_set{
    int key;
    UT_hash_handle hh;     //??????
};

struct unordered_map{
    int key;
    int val;
    UT_hash_handle hh;
};

bool uniqueOccurrences(int* arr, int arrSize){
    struct unordered_map* occur=NULL;
    for(int i=0;i<arrSize;i++)
    {
        struct unordered_map* tmp=NULL;
        HASH_FIND_INT(occur,&arr[i],tmp);
        if(tmp==NULL)
        {
            tmp=malloc(sizeof(struct unordered_map));
            tmp->key=arr[i],tmp->val=1;
            HASH_ADD_INT(occur,key,tmp);
        }
        else
        {
            (tmp->val)++;
        }
    }
    struct unordered_set* times=NULL;
    struct unordered_map *cur,*cur_tmp;
    HASH_ITER(hh,occur,cur,cur_tmp){
        struct unordered_set* tmp=NULL;
        HASH_FIND_INT(times,&(cur->val),tmp);
        if(tmp==NULL)
        {
            tmp=malloc(sizeof(struct unordered_set));
            tmp->key=cur->val;
            HASH_ADD_INT(times,key,tmp);
        }
    }
    return HASH_COUNT(occur)==HASH_COUNT(times);
/*代码来自于leetcode官方*/
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值