题目
给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。
示例
输入: nums = [1,1,2,3,3,4,4,8,8]
输出: 2
输入: nums = [3,3,7,7,10,11,11]
输出: 10
C语言代码
逐个异或
因为两个相同的数异或结果为0
int singleNonDuplicate(int* nums, int numsSize)
{
int ans = 0;
for (int i = 0; i < numsSize; ++i)
{
ans ^= nums[i];
}
return ans;
}
正常遍历
每次遍历加2,如果元素和下一个元素不同,则返回此元素。
int singleNonDuplicate(int* nums, int numsSize)
{
if (numsSize < 2)
{
return nums[0];
}
for (int i = 0; i < numsSize - 1; i += 2)
{
if (nums[i] != nums[i + 1])
{
return nums[i];
}
}
return nums[numsSize - 1];
}