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

说明:

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

示例 1:

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

示例 2:

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

挺简单的,因为楼主之前就常用位运算符就很快解出来了

使用无序map(比map明显加快很多100ms->40ms)

class Solution {
public:
int singleNumber(vector<int>& nums) {
unordered_map<int,int>m;
for(int i=0;i<nums.size();++i){
if(m.find(nums[i]) != m.end()){
m.erase(m.find(nums[i]));
}else{
m[nums[i]] = 1;
}
}
return m.begin()->first;
}
};

^运算符

^运算符的运算符合(类似)乘法交换律

即 1^ 2 ^ 3 ^ 2 ^ 3 = 1 ^ 2 ^ 2 ^ 3 ^3 = 1

class Solution {
public:
int singleNumber(vector<int>& nums) {
int a=nums[0];
for(int i=1;i<nums.size();i++)
a=a^nums[i];
return a;
}
};

更多位运算符的骚操作可以看我另一篇博文 传送门


进阶:

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

说明:

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

示例 1:

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

示例 2:

输入: [0,1,0,1,0,1,99]
输出: 99

考虑到要查找存在3个,所以我们直接利用两个变量存储

class Solution {
public:
int singleNumber(vector<int>& nums) {
int a = 0, b = 0;
for (auto x : nums) {
b = (b ^ x) & ~a;
a = (a ^ x) & ~b;
}
return b;
}
};

最新文章

  1. Meta标签介绍
  2. Is WPFdead
  3. SVO实时全局光照优化(里程碑MK0):Sparse Voxel Octree based Global Illumination (SVO GI)
  4. Asp.net MVC4 使用EF实现数据库的增删改查
  5. 【Shell脚本学习5】第一个Shell脚本
  6. Android实例-闪光灯的控制(XE8+小米2)
  7. oracle 大表删除数据后,回收空间的问题。
  8. JSON 入门
  9. 配置NFS服务器
  10. 机器学习,安装python的支持包
  11. Python函数返回不定数量的值
  12. atool-build 打包项目报JavaScript heap out of memory 错误
  13. selenium+java二元素定位
  14. Activiti之流程通过、驳回、会签、转办、中止、挂起等核心操作封装(Activiti5.9)
  15. win10忘记开机密码无法进入桌面
  16. hdu4549_M斐波那契数列 解题报告
  17. AngularJS——第6章 作用域
  18. jqgrid 自定义添加行数据
  19. High accuracy voltage regulator
  20. ASP.NET MVC中的cshtml页面中的下拉框的使用

热门文章

  1. linux 读取 USB HID鼠标坐标和点击 在 LCD上显示
  2. Fortify Audit Workbench 笔记 SQL Injection SQL注入
  3. day1 执行用例
  4. Java集合04——fail-fast&amp;fail-safe 详解
  5. tkinter学习1
  6. isEmpty 判空函数 内部分别判断是 null 空数组 等
  7. .NET Core学习笔记(5)——WebAPI从Server端push消息到Client
  8. 数字逻辑与EDA设计
  9. cocosCreator定制小游戏构建模板
  10. java-乘法口诀表。(新手)