Bu bir leetcode sorusu. Soru şu bir array var ve arrayin içerisinde tekrar etmeyen bir elemanı bulmalıyım. Atıyorum int nums[] = {0,-1,2,0,3,5,-1,3,5}; diye bir array olsun. Arrayda 2 hariç her elemandan bir tane daha var. Benim burada kendisinden bir tane daha olmayan elemanı bulmalıyım.
Adamlar xor kullanarak çözüme ulaşmışlar.
Şöyle bir çözüm üretilmiş ama ben nasıl çözdüklerini anlamadım. Adım adım gitmeye çalıştım kodda. XOR kapısı inputlar aynı olduğunda 0 farklı olduğunda 1 veriyor. Bir sayıyı 0 ile XOR yapmam halinde sayının kendisini elde ederim.
For içerisinde kodun döndüğünü varsayayım.
i = 0 -> result = result^nums[0] -> 0^0 = 0
i = 1 -> result = result ^nums[1]-> 0^-1 = -1
i = 2 -> result = result^nums[2] -> -1^2 = 1
i = 3 -> result = result^nums[3] -> 1 ^ 0 = 1 şeklinde gidiyor olarak değerlendirdim. Bu kodun çıktsı nasıl direkt 2 yi verebilir. Nerede hata yapıyorum.
Adamlar xor kullanarak çözüme ulaşmışlar.
C:
#include <stdio.h>
int singleNumber(int* nums, int numsSize)
{
int result = 0;
for (int i = 0; i < numsSize; i++)
{
result ^= nums[i];
}
return result;
}
int main(void)
{
int nums[] = {0,-1,2,0,3,5,-1,3,5};
printf("%d",singleNumber(nums,9));
return 0;
}
Şöyle bir çözüm üretilmiş ama ben nasıl çözdüklerini anlamadım. Adım adım gitmeye çalıştım kodda. XOR kapısı inputlar aynı olduğunda 0 farklı olduğunda 1 veriyor. Bir sayıyı 0 ile XOR yapmam halinde sayının kendisini elde ederim.
For içerisinde kodun döndüğünü varsayayım.
i = 0 -> result = result^nums[0] -> 0^0 = 0
i = 1 -> result = result ^nums[1]-> 0^-1 = -1
i = 2 -> result = result^nums[2] -> -1^2 = 1
i = 3 -> result = result^nums[3] -> 1 ^ 0 = 1 şeklinde gidiyor olarak değerlendirdim. Bu kodun çıktsı nasıl direkt 2 yi verebilir. Nerede hata yapıyorum.