要求:
数组中有N+2个数,其中N个数出现了偶数次,2个数出现了奇数次(这两个数不相等),请用O(1)空间复杂度,找出这两个数。
分析:
方法一:字典法
定义一个字典,把数组元素值作为key,遍历整个数组,如果key值不存在,则将value设为1,如果key值已经存在,则翻转该值(如果为0,则翻转为1;如果为1,则翻转为0),完成数组遍历后,字典中value为1的就是出现奇数次的数。
例如给定数组[3,5,6,6,5,7,2,2]
首先遍历3,字典中元素为:{3:1};
遍历5,字典中元素为:{3:1,5:1};
遍历6,字典中元素为:{3:1,5:1,6:1};
遍历6,字典中元素为:{3:1,5:1,6:0};
遍历5,字典中元素为:{3:1,5:0,6:0};
遍历7,字典中元素为:{3:1,5:0,6:0,7:1};
遍历2,字典中元素为:{3:1,5:0,6:0,7:1,2:1};
遍历2,字典中元素为:{3:1,5:0,6:0,7:1,2:0};
显然,出现1次的数组元素为3和7.