136 Single Number
Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
题意:
给一个整形数组,其中每个元素都出现了2次,除了某个元素外。找出这个只出现一次的元素。
要求,线性时间复杂度、不使用额外的空间。
方法一:
思路:
开始想的就是利用暴力解决的办法,先进行排序,再进行逐个查找比较,索引以2为步长前进。虽然没有利用额外的空间,但是运行效率低,代码如下:
class Solution {
public:
int singleNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
int n = 0;
for(int i=0;i!=nums.size();++i)
{
if (i+1==nums.size())
{
n = nums[i];
break;
}
if(nums[i]==nums[i+1]){
i++;
}
else{
n = nums[i];
}
}
return n;
}
};
方法二:
思路:
利用按位异或的思想来解决此问题,其余元素都出现了两次,通过位运算中每个二进制位相同进行异或则为0可方便的找到这个只出现一次的元素,代码如下:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int len = nums.size();
int re = 0 ;
for (int i=0; i<len; i++)
{
res ^= nums[i];
}
return res;
}
};