传送门

图解:

复杂度:

  1. 时间复杂度:O(N),其中 N 位数组 nums 的长度;遍历数组占用 O(N),每轮中的常数个位运算操作占用 O(1);

  2. 空间复杂度:O(1),数组 counts 长度恒为 32,占用常数大小的额外空间;

代码实现:

function singleNumber(nums: number[]): number {
  let res = 0;

  for (let i = 0; i < 32; i++) {
    let count = 0;

    for (let j = 0; j < nums.length; j++) {
      // 先将数右移,并求出最后一位为 1 的个数
      if ((nums[j] >> i & 1) == 1) {
        count++;
      }
    }

    // 找到某一位取余为 1 的数,并左移,为了将这一位循环结束后移至原位
    if (count % 3 != 0) {
      res = res | 1 << i;
    }
  }

  return res;
};
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 传送门
  2. 2. 图解:
  3. 3. 复杂度:
  4. 4. 代码实现: