题目

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次;

要求线性时间,不需要额外空间。

最先采用的方法是先对序列排序,然后遍历一次即可找到,此时复杂度为O(nlogn),不过OJ竟然过了。

还是要思考下线性时间的实现方法的,

/*利用异或运算实现,复杂度为O(n) a^b = b^a ; a^a = 0 ; 0^a = a^0 = a*/

由此,对整个序列每个元素采取异或运算,0^a1^a2^…^an最终得到的结果即是那个只出现一次的元素。

这个方法实在是太赞了!可惜不是我想出来的… ^||^

AC代码

class Solution {
public:
/*利用算法库的排序实现,复杂度为O(nlogn)*/
//int singleNumber(vector<int>& nums) {
// if (nums.empty())
// return -1;
// sort(nums.begin(), nums.end());
//
// int size = nums.size(); // for (int i = 0; i < size - 1; i += 2)
// {
// if (nums[i] != nums[i + 1])
// {
// return nums[i];
// }//if
// }//for
// return nums[size - 1];
//} /*利用异或运算实现,复杂度为O(n) a^b = b^a ; a^a = 0 ; 0^a = a^0 = a*/
int singleNumber(vector<int>& nums) {
if (nums.empty())
return -1;
int ret = 0 , size = nums.size();
for (int i = 0; i < size; ++i)
ret = ret ^ nums[i];
return ret;
} };

GitHub测试程序源码

最新文章

  1. 比较两个数据库表table结构不同之处
  2. android studio常见错误
  3. UNION语句查询(转载)
  4. 【转】Java中如何遍历Map对
  5. MySQL支持Emoji表情
  6. 第三十九篇、NavBar动态隐藏、设置透明、毛玻璃效果
  7. Robot Framework web测试demo
  8. hdu 确定比赛名次
  9. 监听手机晃动(摇一摇)SensorEventListener
  10. Hadoop认知--在不同的阶段
  11. Sublime Text: [Decode error - output not utf-8]
  12. IndentationError 这个错误是缩进的问题
  13. bzoj 3924 点分
  14. ML.NET教程之出租车车费预测(回归问题)
  15. Create a Hadoop Build and Development Environment
  16. 转 mysqli 事务常用方法
  17. vue inheritAttrs、$attrs和$listeners使用
  18. [002] delete_duplication_of_linked_list
  19. iOS:视图切换的第二种方式:UINavigationController导航栏控制器
  20. Quick 3.3 的代码资源加密

热门文章

  1. ko.js循环绑定值问题(工作遇见)
  2. Codeforces Round #532(Div. 2) A.Roman and Browser
  3. json数据有换行符时提交不成功的坑
  4. oracle GROUP BY rollup
  5. hdu4553约会安排(线段树区间合并)
  6. 对shell的简单认识
  7. Aop第一节
  8. C# (Cookie)基本操作
  9. OAuth2.0基本原理及应用
  10. 深刻的理解Fragment生命周期 都在做什么,fragment生命周期