我是靠谱客的博主 痴情朋友,最近开发中收集的这篇文章主要介绍LeetCode剑指offer56题总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目:一个整型数组 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题总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部