逻辑与或非运算

Review

  1. 2024-11-13 07:53

[!Summary]

一、Introduction #

异或 ^ 特点

  1. 相同为0,不同为1
  2. 满足交换律、结合律 a^b == b ^ a a^b^c == a^(b^c)

习题

  1. 一个数组,只有一个数出现奇数次,其他都是偶数次,找出奇数次的数
  2. 一个数组,只有2个数出现奇数次,其他都是偶数次,找出这2个数
function getValue1(arr) {
  let exr = 0;

  for (let i of arr) {
    exr ^= i;
  }

  console.log(exr);
  return exr;
}

getValue1([1, 2, 3, 3, 2, 1, 5, 5, 3, 3, 5]);
function getValue2(arr) {
  let exr = 0;

  for (let i of arr) {
    exr ^= i;
  }

  let rightOne = exr & (~exr + 1);

  let a = 0;
  for (let i of arr) {
    if ((i & rightOne) === 0) {
      a ^= i;
    }
  }

  const b = exr ^ a;

  console.log(a, '**', b);
  return [a, b];
}

getValue2([1, 2, 3, 3, 2, 1, 5, 5, 3, 3, 5, 3]);

Reference #