Skip to content

Latest commit

 

History

History
36 lines (31 loc) · 996 Bytes

137.只出现一次的数字II.md

File metadata and controls

36 lines (31 loc) · 996 Bytes

137. 只出现一次的数字 II

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 3 * 10^4
  • -2^31 <= nums[i] <= 2^31 - 1
  • nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次

进阶:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

解法

1、hash表映射,空间O(n)

2、位运算

func singleNumber(nums []int) int {
	var once, twice int
	for _, n := range nums {
		// ^twice为twice按位取反
		once = ^twice & (once^n) // 出现一次这里=n, 出现2次这里=0,出现3次这里= ~n & n = 0
		twice = ^once & (twice^n)// 出现一次这里=0,出现两次这里=n,出现3次这里=0
	}
	return once
}