异或
只出现一次的数字(其他两次)
一串数中,每个数都出现2次,只有一个数出现1次,求出这个数。
考察异或的性质,根据 a^a=0,a^0=a
那么就对每个数异或一下即可。然后根据交换律,每个数都异或了之后,相同的都归0了,剩下一个就自动求出来了。
大概是这样(找不到C++版,凑合看):
只出现一次的数字II (其他三次)
方法一,依次确定每一个二进制位
一串数中,每个数都出现3次,只有一个数出现1次,求出这个数。
考虑拆位做,讨论一下这些数的每一位。
例如[2,2,1,2],拆成二进制,[10,01,10,10]
明显有一个特点,我们所求的结果,对于每一位,如果这一位是1,那么1出现的个数肯定不为3的倍数。
在这题中,结果是1,二进制是01,第0位1的个数只有1次。(反证法:如果出现的个数是3的倍数,那么肯定不是我们要求的数)
我们再想想,用这个方法套进第一题可行吗?答案是肯定的,不过要把%3换成%2(count%3那里)
标签:10,运算,个数,数都,trick,异或,出现,数字 From: https://www.cnblogs.com/didiao233/p/18442433