您的位置:首页 > 其它

【136.只出现一次的数字】 LeetCode

2019-03-13 22:34 204 查看

题目描述:

 

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1]
输出: 1

示例 2:

输入: [4,1,2,1,2]
输出: 4

 

算法一:

思路:

     遍历数组,使用 <algorithm> 中的 count() 函数算出每一个元素出现的的次数。

     当结果为1时直接返回该元素。

[code]class Solution {
public:
int singleNumber(vector<int>& nums) {
#if 1
for(vector<int>::iterator i = nums.begin(); i!= nums.end();i++){
int temp = count(nums.begin(),nums.end(),*i);
if(temp == 1){
return *i;
}
}
#endif
return 0;
}
};

提交结果:

 

算法二:

思路:

     除了一个元素以外,其余元素都会出现两次,所以可以先将数组排序(可使用库函数中的sort()方法)。

     结果例如:{1,1,2,3,3}

     然后再两两元素比较是否相同,因为在排序的情况下,在比较的两个元素中,如果不相同,

     则靠左的元素为只出现一次的元素,故直接返回。

     注意:因为数组的长度一定是奇数,故不可能完全两两比较。

                如果比较到了最后一个数字,则该元素一定为所求的元素,直接返回。

 

[code]class Solution {
public:
int singleNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
for(vector<int>::iterator i = nums.begin();i!=nums.end();i+=2){
if(i+1==nums.end()){
return *i;
}
else if(*i!=*(i+1)){
return *i;
}
}
return 0;
}
};

 

提交结果:

 

算法3:

思路:

      使用异或(^)解决问题。

      a^a^b^b^c = c           (看别的神仙操作的,服了,这都能想得出来...)

      遍历数组,定义一个整型数值 x ,利用  front() 函数得到数组的第一个元素,赋给 x 

      接着从第二个元素开始一直  异或 到结尾。返回  x

[code]class Solution {
public:
int singleNumber(vector<int>& nums) {
int x = nums.front();
for(vector<int>::iterator i = nums.begin()+1;i!=nums.end();i++){
x=(x^(*i));
}
return x;
}
};

提交结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: