题目要求
解题思路
刚开始想再定义一个数组,存储不同的数字出现的次数,后来发现不太容易。然后查找了一下资料,发现有sort函数可以直接给数组排序,然后运用一个for循环,找出只出现一次的数字。
C++代码
class Solution {
public:
int singleNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();i=i+2)
{
if(i==nums.size()-1)
{
return nums[i];
}
if(nums[i]!=nums[i+1])
{
return nums[i];
}
}
return -1;
}
};
C#代码(和C++代码原理差不多)
public class Solution {
public int SingleNumber(int[] nums) {
Array.Sort(nums);
for(int i=0;i<nums.Length;i=i+2)
{
if(i==nums.Length-1)
return nums[i];
if(nums[i]!=nums[i+1])
return nums[i];
}
return -1;
}
}
C#代码(位运算)
按位异或,a异或a得0、a异或0得a。由此可知,将nums中所有元素进行异或,最后结果即为只出现一次的数字。
public class Solution {
public int SingleNumber(int[] nums) {
int ret=0;
foreach(int e in nums)
ret^=e;
return ret;
}
}
运行结果
心得
还是有很多不太熟悉的函数,以后还要多多学习!