给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
解决思路用求异 运算 ^ ,因为里面只有一个与其他不一样的数。相同的数会变成0.
public int SingleNumber(int[] nums)
{
int ret=0;
for(int i=0;i<nums.Length;i++)
{
ret ^= nums[i];
}
return ret;
}
思路2。不是线性介,很暴力的解决
public int SingleNumber(int[] nums)
{
bool isSame=false;
int val=0;
int temp=-1;
for(int i=0;i<nums.Length;i++)
{
isSame=false;
if(temp!=i)
{
for(int j=nums.Length-1;j>=0;j--)
{
if(nums[i]==nums[j]&&i!=j)
{
temp=j;
isSame=true;
continue;
}
}
if(isSame==false)
{
val=nums[i];
return val;
}
}
}
return val;
}