您的位置:首页 > 其它

Leetcode Single Number III

2016-07-29 21:54 204 查看
题意:

        找到数列中只出现一次的两个数,其他数都出现两次。

思路:

        使用哈希表记录数出现的次数,最后找出出现一次的两个数。考虑到数的范围未知,使用了两个哈希表来扩展数的范围。扩展的范围是LCM(a,b)。此题中a=1000,b=999。

以下为代码:

int* singleNumber(int* nums, int numsSize, int* returnSize) {
int mark1[1000],mark2[1000];
int i=0,j=0,k=0;
int* r=(int*)malloc(sizeof(int)*2);
int nums_h1[numsSize],nums_h2[numsSize];
int temp1=0,temp2=0;
for(i=0;i<1000;++i){
mark1[i]=0;
mark2[i]=0;
}
for(i=0;i<numsSize;++i){
temp1=nums[i]%1000;
if(temp1<0){
temp1+=1000;
}
temp2=nums[i]%999;
if(temp2<0){
temp2+=999;
}
nums_h1[i]=temp1;
nums_h2[i]=temp2;
mark1[temp1]++;
mark2[temp2]++;
}
for(i=0;i<1000;++i){
if(mark1[i]%2==1){
for(j=0;j<numsSize;++j){
if(nums_h1[j]==i){
temp2=nums[j]%999;
if(temp2<0){
temp2+=999;
}
if(mark2[temp2]%2==1){
r[k]=nums[j];
k++;
if(k==3){
*returnSize=2;
return r;
}
}
}
}
}
}
*returnSize=2;
return r;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode