剑指offer56
# 剑指offer56
一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
输入:nums = [4,1,4,6] 输出:[1,6] 或 [6,1]
- 一个数如果是和0异或则得到其本身,和自己异或则为0.
- 如果问题改成除了一个数字之外,其他数字都出现了两次,那么直接用0和数组中所有数字都异或一轮,剩下的就是只出现了一次的数字 。如果是有两个只出现了两次的数字,则需要对原先的数组进行分组,每组只有一个只出现了一次的数字和若干对出现两次的数字,这样就转换成了上面一种情况。方法是对两个只出现一次的数相异或的结果,找到最低位为1的数字,这一位为1表明那两个数在这位上一个为1一个为0,对于整个数组而言,根据在这一位是否为1来进行分组。
编辑 (opens new window)
上次更新: 2023/12/15, 15:49:57