剑指 Offer 56 - I. 数组中数字出现的次数

128 阅读1分钟

对于一组数组:4 1 4 6,除了两个数只出现了一次,其他数字全部出现了两次,该如何找出这两个数?

  • 如果只有一个数字只出现了一次,那么很简单,对数组的每个元素进行异或^,每个出现了两次的数都会和自己异或一次,而异或之后的结果就是0,最终剩下的数字就是那个只出现了一次的数
  • 那么当有两个数只出现了一次的时候,最终我们得到的是这两个数字异或的结果。如果能找到一个方法,把数组分成两组,1和6分别在不同的组中,并且其他相同的数也要在一组之内。之后两组组内分别异或,最后得到的结果自然就是1和6.
  • 那怎么样才能将它们分组呢?1和异或之后,剩下111,以二进制的眼光来看,它的每一位为1的数,都意味着在这一位上,1和6的数字是不同的,所以异或后的结果才是1。那么如果能找到它其中一位为1的数,并让1和6分别和这个数进行与&,得到的结果一定是不同的(一个是0和1与,一个是1和1与)