作者JIWP (神楽めあ的錢包)
標題Re: [閒聊] 每日leetcode
時間2024-05-31 20:41:10
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