题目:
一个整型数组 nums
里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
OJ题目给的为 int* singleNumbers(int* nums, int numsSize, int* returnSize){ }。
这里介绍用异或(^)的方法解决这个问题。
分析题目:
nums为数组,numsSize为数组中数字个数,时间复杂度O(n)表示为线性算法,空间复杂度O(1)表示所需空间为常量。与n无关。
介绍方法:
1. 异或的方法即在数字的二进制下计算,异或后相同为0,相异为1。这样对数组中的每个数字异或后就可以得到那两个数字异或的结果。
int ret = 0 ;
for(int i=0;i<numsSize;i++)
{
ret^=nums[i];
}
举例: