概述
题目:一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
前提知识:
1.两个相同的数字异或之后为0
2.0与任何数异或结果均为该数
3.一连串的异或可以交换顺序
总结大神的思路:
1.综上所述遍历一遍会得到两个不同数的异或值res。
2.由异或的特点,res中为1的部分就是原先不同的两数的二进制中不同的部分。
3.随机选择res中任一为1的位置,并令其他位置为0,赋值给div。
4.再次遍历数组,将所有的数与div相与,由于不同的数在div为1的位置一定会出现不同,因此与div相与的结果也会不同,而相同的数字由于二进制在div位置的值相同,因此相与结果唯一,因此可以将相与结果分为两大类,再将两大类中所有数相异或,得到不同的两数。上述操作可以在一个循环完成。
原文链接
最后
以上就是痴情朋友为你收集整理的LeetCode剑指offer56题总结的全部内容,希望文章能够帮你解决LeetCode剑指offer56题总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复