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;
}
找到数列中只出现一次的两个数,其他数都出现两次。
思路:
使用哈希表记录数出现的次数,最后找出出现一次的两个数。考虑到数的范围未知,使用了两个哈希表来扩展数的范围。扩展的范围是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 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解