LeetCode只出现一次的数字(位运算法)

136. 只出现一次的数字

a^a=0; 0^a=a

int singleNumber(int* nums, int numsSize){
    int i,ans=0;
    for(i=0;i

260. 只出现一次的数字 III

题中只有两个数出现一次,其余均出现两次,我们知道相同的两个数异或,得到的结果为0,不同的两个数异或得到的结果一定不为0。

通过对所有的数字取异或得到的结果=不同的两个数num1,num2异或,这题和上一题有所区别,但又有相似之处。由于题中给的数组一定且只有两个不同的数字,那么我们可以想到将这些数字分为两组,这样和上一题的解法一样。只需要将这两个不同的数字放到不同的组别。那么如何实现呢?通过刚刚异或的结果,一定可以区分这两个数字,然后放到不同的组别。并且对于相同的数字也一定是放在同个数组中的。

 

LeetCode只出现一次的数字(位运算法)_第1张图片

int* singleNumber(int* nums, int numsSize, int* returnSize){
    int i,j,tmp;
    int *con=(int*)malloc(sizeof(int)*2),rst=0,one=0;
    memset(con,0,sizeof(con));
    *returnSize=2;
    for(i=0;i

 

你可能感兴趣的:(位运算)