称号:除了外面两个数字为整数数组。其他人物都出现两次。
请敲代码,找了两个数字只出现一次。它需要的时间复杂度O(n),空间复杂度是O(1)。
或深足够的认识。
要思路还是之前的数组中仅仅出现一次的数字的那种模式,一次遍历加上异或运算。那么这个异或的值肯定是这两个仅仅出现一次的数字的相异或的值。那么这个值的二进制表现形式中的1的结果就表示这两个数字在该bit位上不一样。那么通过此举,我们能够以这个bit位是否为1来从整个数组中把这两个仅仅出现一次的数字分开。通过此举。别的出现两次的数字一会被分到同一组,那么结果就是有两组数据。每组都是奇数个数字。都有仅仅出现一次的数字。
#include#include int findOutTwo(int *a,int n,int &x,int &y){ assert(a); assert(n>2); int result=a[0]; for(int i=1;i
结果为:
版权声明:本文博客原创文章,博客,未经同意,不得转载。