题目描述
解法一:暴力法
思路:
暴力法思路较简单,两层for循环,遇到相同的数就跳出第一层循环,直到遍历整个数组,找到只出现一次的数字。
代码如下:
public class Solution {
public int SingleNumber(int[] nums)
{
int j;
int n;
for (int i = 0; i < nums.Length; i++)
{
n = nums[i];
for (j = 0; j < nums.Length; j++)
{
if (i == j)
{
continue;
}
if (n == nums[j])
{
break;
}
}
if (j == nums.Length)
{
return n;
}
}
return 0;
}
}
运行结果分析:
解法二:位运算
思路:
这个题目还可以用位运算的方法解决,可以利用异或运算符解决。
异或运算规则:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1)
因此,数组中两个相同的数做异或运算后结果为0,当遍历完整个数组之后,最终结果就是只出现一次的数字。
代码如下:
public class Solution {
public int SingleNumber(int[] nums)
{
int n = nums[0];
for (int i = 1; i < nums.Length; i++)
{
n = n ^ nums[i];
}
return n;
}
}