第一次自用UThash,第一次用GitHub查源代码,第一次去外网看文档,第一次学会了用新的开源文件,希望还有更多的第一次!
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主要功能函数各个参数以及数据类型详解
都是自己摸索,很主观的理解,欢迎指出和纠正纰漏!