【C/哈希表/LeetCode】169. 多数元素

本文记录了作者首次运用UThash解决LeetCode中的多数元素问题,通过阅读源代码和查阅文档,实现了查找并返回数组中出现次数超过一半的元素。过程中体验了GitHub查源码和学习新开源库的乐趣,同时分享了AC代码及个人理解,欢迎交流讨论。
摘要由CSDN通过智能技术生成

第一次自用UThash,第一次用GitHub查源代码,第一次去外网看文档,第一次学会了用新的开源文件,希望还有更多的第一次!


题目来自——力扣(LeetCode)169. 多数元素

169.多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例1:

输入:[3,2,3]
输出:3

示例2:

输入:[2,2,1,1,1,2,2]
输出:2

AC代码

typedef struct HashTable{
    int val;            //数字
    int num;            //数字出现次数
    UT_hash_handle hh;
}HashTable;

int majorityElement(int* nums, int numsSize){
    int i=0;
    HashTable *hashTable=NULL;
    while(i<numsSize){
        HashTable *temp=NULL;
        HASH_FIND_INT(hashTable,&nums[i],temp);
        if(!temp){            //第一次出现,添加到哈希表中
            temp=malloc(sizeof(HashTable));
            temp->val=nums[i];
            temp->num=1;
            HASH_ADD_INT(hashTable,val,temp);
            if((temp->num)>numsSize/2)return temp->val;            //判断是否超过半数
        }else{            //不是第一次出现
            (temp->num)++;            //出现次数num+1
            if((temp->num)>numsSize/2)return temp->val;            //判断是否超过半数
        }
        i++;
    }
    return 0;
}

嘛,虽然题目不难,但整个过程还是很有趣的,最重要的是学会了看源码和文档来解决问题,第一次记录一下~

如果有需要对uthash的详解的话可以看我写的这篇【开源库uthash】uthash主要功能函数各个参数以及数据类型详解

都是自己摸索,很主观的理解,欢迎指出和纠正纰漏!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值