题目描述

Given an array of numbers nums, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.

题目大意

给定一个数组,该数组存在两个数字只出现了一次,其余的数字在该数组中出现了两次,找到数组中的两个只出现了一次的数字。

示例

E1

Input:  [1,2,1,3,2,5]
Output: [3,5]

解题思路

Solution1

用一个set类型保存访问过的数字,每访问到一个set中没有的数字则将其插入set中,若set中已经存在了该数字,则将set中的该数字删除。即最后set存在的两个数字即为结果。

Solution2

一个巧妙的方法,将所有数字异或一遍,即可得到两个出现一次数字的异或。再将得到的异或结果,除了最后一个非零位,其余非零位全部置零。最后遍历一遍数组中的数字,将数字分为两组,与该异或结果按位与是否为零进行分开,则分开后的所有数字做异或,最后可得到两个结果数字。

复杂度分析

时间复杂度:O(N\N)

空间复杂度:O(N\1)

代码1

class Solution {
public:vector<int> singleNumber(vector<int>& nums) {set<int> visit;// 遍历一边数组for(int num : nums) {// 查找set中是否已有该数字auto iter = visit.find(num);// 若没有,则将其插入setif(iter == visit.end())visit.insert(num);// 否则,将其删除elsevisit.erase(iter);}vector<int> res;// 将set中剩余的两个数字放入结果数组for(auto iter = visit.begin(); iter != visit.end(); ++iter)res.push_back(*iter);return res;}
};

代码2

class Solution {
public:vector<int> singleNumber(vector<int>& nums) {// 将所有数字异或,返回得到的异或的结果int dif = accumulate(nums.begin(), nums.end(), 0, bit_xor<int>());// 只保留该异或结果的其中一个非零位,其余置零dif &= -dif;vector<int> res = {0, 0};// 遍历一边数组,将数组中的数字分类for(int num : nums) {// 若该数字与dif按位与不为零,则将其异或的结果保留在res[0]中if(num & dif)res[0] ^= num;// 否则,将其保留到res[1]中elseres[1] ^= num;}return res;}
};    

转载于:https://www.cnblogs.com/heyn1/p/11119255.html

LeetCode-260 Single Number III相关推荐

  1. 【?异或】LeetCode 260. Single Number III

    LeetCode 260. Single Number III Solution1: 博客转载自:http://www.cnblogs.com/grandyang/p/4741122.html 这道题 ...

  2. leetcode 260. Single Number III | 260. 只出现一次的数字 III(位运算:分组异或)

    题目 https://leetcode.com/problems/single-number-iii/ 题解:分组异或 参考1:讨论区题解 you know you can eliminate dou ...

  3. LeetCode 260. Single Number III

    转载请注明出处:http://www.cnblogs.com/liangyongrui/p/6354552.html 异或的妙用. 一开始读题不仔细,以为有很多的孤立数字. 没想到就两个- - 然后参 ...

  4. leetcode 算法解析(一):260. Single Number III(C++版本和自己的注解)

    这个题来自<剑指offer>但是书上上感觉讲解不太详细,还是看博客吧(我把下面博客改写成了C++版本运行通过) 注意这个题的相关代码中,输入的数组只能有两个数出现一次,如果有第三个数出现一 ...

  5. 【LeetCode】-- 260. Single Number III

    问题描述: https://leetcode.com/problems/single-number-iii/ 在一个数组里面,只有两个元素仅出现过1次,其余都出现过两次.找出出现仅一次的那两个(a, ...

  6. 260. Single Number III

    题目: Given an array of numbers nums, in which exactly two elements appear only once and all the other ...

  7. Leet Code OJ 260. Single Number III [Difficulty: Medium]

    题目: Given an array of numbers nums, in which exactly two elements appear only once and all the other ...

  8. 【异或】LeetCode 137. Single Number II

    LeetCode 137. Single Number II Solution1:不会做,抄的 博客转载自:http://www.cnblogs.com/grandyang/p/4263927.htm ...

  9. 【异或】LeetCode 136. Single Number

    LeetCode 136. Single Number Solution1:我的答案 还好异或的性质没记错,还好,还好 class Solution { public:int singleNumber ...

  10. [勇者闯LeetCode] 136. Single Number

    [勇者闯LeetCode] 136. Single Number Description Given an array of integers, every element appears twice ...

最新文章

  1. jQuery插件开发学习笔记
  2. codeforces 667A A. Pouring Rain(水题)
  3. 通信原理中的几个重要概念
  4. 巨蟒python全栈开发-第6天 is==
  5. [html] svg如何转为字体图标?
  6. 对比四大企业级linux版本_Linux家族族谱
  7. python变量类型声明_python变量声明及简单数据类型
  8. Glusterfs(distribute) + DRBD + heartbeat + mon 实现分布式文件系统1
  9. 电脑开机时光驱咔咔响_电脑机箱噪音大?看懂这篇内容,让你四步就能解决问题...
  10. gerber文件如何转为PCB文件
  11. 量表与问卷的区别比较
  12. java实现pdf文件的电子签字+盖章+二维码+水印+PDF文件加密的解决方案
  13. 用JBE修改Java字节码
  14. 群友转发了一段家庭矛盾的视频
  15. 计算机配置 主板,整套解决方案:I5-3470处理器和什么主板构成计算机配置?
  16. Mac平台第三方网站下载
  17. 深度学习水果识别系统-python
  18. python中遇到报错OSError: [Errno 22] Invalid argument的解决方法
  19. ArcBlock ⑦ 月报 | 产品一天半迭代1个版本 全球开发者社区建设启动
  20. Vivado关于综合(Synthesis)后存在Hold时序违例(Hold<0),但实现(Implementation)后无时序违例(hold>= 0)的问题

热门文章

  1. 网络丢包诊断与分析的现实与理想
  2. springboot thymeleaf模板使用
  3. POJ-2480 Longge's problem 欧拉函数
  4. SuperMap IS.NET保存地图之Ajax篇(转)
  5. 实现基于 ASP.NET Forms 身份验证的跨子域单点登录
  6. 问题 H: Search Problem (V)
  7. 基于S函数的BP神经网络PID控制器及simulink仿真
  8. 应力偏张量的物理意义_物理学中张量的由来
  9. python测控_基于RN8302和Python的电能测控系统设计
  10. pythonmatplotlib怎么设置曲线_python – Matplotlib的“symlog”选项:如何防止曲线“回来”?...