异或操作的应用 发表于 2018-08-24 分类于 算法 基本规则 异或操作满足交换律和结合律 0^N = N N^N = 0 用于交换两个数12345678910111213/** * @Description: 使用异或操作实现交换, * 但是a和b不能相等,否则两者的数据都会被洗成0 * @param {*} a * @param {*} b * @return {*} */function swapByEor (a, b) { a = a ^ b b = a ^ b a = a ^ b} 找出数组中唯一一个出现奇数次的数123456789101112/** * @Description: 找出数组中唯一一个出现奇数次的数 * @param {*} arr * @return {*} */function findOddTimesNum (arr) { let eor = 0 for (let item of arr) { eor ^= item } return eor} 找出数组中唯二的出现奇数次的两个数123456789101112131415161718192021/** * @Description: 找出数组中唯二的出现奇数次的两个数 * @param {*} arr * @return {*} */function findOddTimesNum2 (arr) { let eor = 0 for (let item of arr) { eor ^= item } //找出最右侧不等于1的那一位 let eor1 = eor & (~eor + 1) let num1 = 0 for (let item of arr) { if (eor1 & item) { num1 ^= item } } let num2 = eor ^ num1 return [num1, num2]}