给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。

示例 :

输入: [1,2,1,3,2,5]
输出: [3,5]
注意:

结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?

思路:

1.对所有数字异或,一样的数字抵消,出现一次的两个数字异或运算后必定不为0;

a^0=a, a^a=0,所以对整个数组进行异或运算剩下的应该是只出现了一次的两个数的异或结果a

2.这个数字和相反数做与运算得到一个二进制位最右边一位为1的数字;

两个不同的数,其异或结果于二进制的表达上,任意一个值为一的比特位便表示了两个数的不同(如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0)。

所以我们找到a最低位为1的值,这是他们两个数不同的地方

a &=(~a)+1;可以完成这个操作

3.a和数组的每个数字做与运算,等于0的分为一组,等于a的分为一组,同时也将两个不一样的数字分开;

两个数分在了不同的组,之后分别异或,各组中除了他俩,其他的都出现了两次,所以各组最后的异或结果就是他俩的值

4.完成。

class Solution {
    public int[] singleNumber(int[] nums) {
        int n = nums.length;
        int a=0,i;
        for(i=0;i<n;i++)
        {
            a = (a^nums[i]);
        }
        a &=(~a)+1;
        int[] b = new int[2];
        for(i=0;i<n;i++)
        {
            if((a&nums[i])==0)
            {
                b[0] = (b[0]^nums[i]);
            }
            else
            {
                b[1] = (b[1]^nums[i]);
            }
        }
        return b;
    }
}

Leetcode--260. 只出现一次的数字Ⅲ相关推荐

  1. LeetCode 260. 只出现一次的数字 III(位运算)

    1. 题目 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 :输入: [1,2,1,3,2,5] 输出: [3,5] 注意: 结 ...

  2. Java实现 LeetCode 260 只出现一次的数字 III(三)

    260. 只出现一次的数字 III 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 : 输入: [1,2,1,3,2,5] 输出 ...

  3. Leetcode 260. 只出现一次的数字 III 解题思路及C++实现

    解题思路: 这道题真有点玄乎,请看:https://blog.csdn.net/smile_watermelon/article/details/47750249 先mark,之后再仔细研究. cla ...

  4. Leetcode 260. 只出现一次的数字 III

    原题链接 解法:异或操作 vector<int> findNumsAppearOnce(vector<int>& nums) {int eO = 0, eOhasOne ...

  5. LeetCode:136. 只出现一次的数字

    136. 只出现一次的数字 题目: 解题思路: 源码: 踩坑点: 题目: 解题思路: 1.法一: 遍历 nums\text{nums}nums 中的每一个元素 如果某个 nums\text{nums} ...

  6. 【leetcode】只出现一次的数字(位运算)

    LeetCode136:只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 解题思路: 这里可以使用异或运算.即两个相同的数字异或 ...

  7. Java实现 LeetCode 136 只出现一次的数字

    136. 只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现 ...

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

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

  9. LeetCode[136.只出现一次的数字](简单) -- java

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明:你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [2 ...

  10. Leecode 260. 只出现一次的数字 III——Leecode每日一题系列

    今天是坚持每日一题打卡的第六天 题目描述 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素.你可以按 任意顺序 返回答案. 进阶:你的算法 ...

最新文章

  1. android 自定义天气特效,《Android自定义控件》WindMillView,仿华为天气风车效果
  2. DBCC--CHECKIDENT
  3. dp主机_MODBUS 和 PROFIBUS-DP 协议有什么区别
  4. canvas-a13prototype.html
  5. Sesame 2.7.0 发布,Java 的 RDF 开发包
  6. 解读OC中的load和initialize
  7. 信息学奥赛一本通(1322:【例6.4】拦截导弹问题(Noip1999))
  8. 华为大佬:做一个快乐的程序员,而不是码农
  9. 递归法:整数划分问题(怎么进行划分呢)
  10. 基于k8s安装配置kubeflow
  11. vue中使用阿里图标
  12. 字典表该如何写查询语句?
  13. 【汇总】全球最吸金的30大连接器厂商
  14. SpringMvc生成Excel和PDF
  15. 洛谷P2245 星际导航
  16. 穿越山谷的英伟达 会成为元宇宙最重要的基础设施吗?
  17. ABAP Modify 的用法(TRANSPORTING)
  18. 电脑已连接无Internet访问解决记录
  19. 合并对象、合并数组的方法
  20. 3D渲染技术分享:实时3D水面渲染(反射、折射、水深与水岸柔边)

热门文章

  1. 程序员面试金典 - 面试题 17.23. 最大黑方阵(DP)
  2. LeetCode 773. 滑动谜题(BFS 地图状态转换的最短距离)
  3. php表白页面,2020情人节表白页面(代码分享)
  4. 为学好计算机 要采取什么措施,计算机概念教学的内容及对策
  5. 机器学习算法优缺点对比及选择
  6. centos 7 ssh 安装mysql,Linux服务器远程ssh为centos7安装MySQL
  7. 史上最全Git学习教程
  8. 研发团队资源成本优化实践 1
  9. 论文浅尝 | 基于正交普鲁克分析的高效知识图嵌入学习
  10. Android中如何查看在res中存放的drawable文件对应的JAVA类型是什么呢