全栈开发知识库

126.只出现一次的数字II

题目

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。

示例 1:

输入:nums = [2,2,3,2]
输出:3

示例 2:

输入:nums = [0,1,0,1,0,1,99]
输出:99

思路

方法一:哈希表(最直观,但空间 O(n))

用哈希表统计每个数字出现的次数,然后找出出现次数为 1 的数字。简单易懂,但空间复杂度 O(n),不符合进阶要求。

方法二:位运算(最优,空间 O(1))

思路:统计每一位上 1 出现的次数

因为其他数字都出现三次,所以对于二进制表示的每一位,所有数字在该位上的 1 的个数之和,如果是 3 的倍数,说明目标数字在这一位是 0;如果不是 3 的倍数(余 1),说明目标数字在这一位是 1。

复杂度

  • 时间复杂度:
  • 空间复杂度:


  • 邮箱 :charon.chui@gmail.com
  • Good Luck!
本页由 Markdown 自动渲染 · 共 628 篇笔记