数组中只有一个数字出现了一次,其余数字都出现了三次,找出这个数
像前面两道那样异或肯定是不行了,因为奇数次的数异或不为0
那么就沦落到用map计数了吗? 不可能,绝对不对能,位运算整齐活
首先明白一点,数组中的数的按二进制展开,并且按位相加,计算相同位置的数值的sum值
例如22个数的第八位都是1,那么该位的值就是22
用一个数组保存每位的和,根据题中数的大小可以定位32长度,即32位的数字
这个数组用于保存nums数组中相同位置的和
接下对该数组的每一位对3取模,出现3次的数,同一位也必定出现3次,那么取模后剩下的就是只出现一次的数字的那一位的值
把保存了只出现一次的数字每一位的数组转化为数字即可
创建一个长度为32位的数组arr,接着遍历nums得到num, 对num的值的每一位进行遍历,arr对应位 + num该位的值(0 | 1),判断该位为0或者1的方式就是与该位与1与运算,num循环右移动,每一位都与1与运算
let arr = new Array(32