260. Single Number III 有一個整數array,在這個array中有兩個數字只出現一次 其他數字都出現兩次 請找出這兩個數字 思路: 把nums所有元素都XOR會得到一個值 這個值就是所求的兩個數(A、B)XOR的結果 且A、B不相等所以這個值不會是0 假設這個值第i個bit=1-->A、B在第i個bit的值不同 就依照第i個bit的值,把nums的元素分成兩堆 最後把這兩堆分別XOR就可以得到A、B了 C code: /** * Note: The returned array must be malloced, assume caller calls free(). */ int* singleNumber(int* nums, int numsSize, int* returnSize) { *returnSize=2; if (numsSize==2){ return nums; } int sum=0,*res=(int*)calloc(2,sizeof(int)),idx=0; for (int i=0;i<numsSize;i++){ sum^=nums[i]; } while(1){ if (((sum>>idx)&1)==1){ break; } idx++; } for (int i=0;i<numsSize;i++){ if (((nums[i]>>idx)&1)==1){ res[0]^=nums[i]; }else{ res[1]^=nums[i]; } } return res; } -- https://i.imgur.com/r9FBAGO.gif
-- ※ 發信站: 批踢踢實業坊(ptt-website.tw), 來自: 111.71.215.194 (臺灣) ※ 文章網址: https://ptt-website.tw/Marginalman/M.1717159275.A.F7B
OnishiSaori: 大濕 05/31 20:42
CanIndulgeMe: 真的是大师级别 05/31 20:43
JIWP: 我是廢物 騙騙p幣 05/31 20:43
SecondRun: 大師 05/31 20:44
Smallsh: 大師 05/31 20:44
schlemm: 包養真心對待異性好友。 05/31 20:44
jjf0323: 好猛 05/31 20:44
aioiwer318: 別卷了 05/31 20:47
sustainer123: 大師 剩我不會位運算 05/31 20:55
orangeNoob: 你好大師 05/31 21:16