package
0.0.0-20230809123828-b071cee2968a
Repository: https://github.com/codehanhan/leetcode-go.git
Documentation: pkg.go.dev

# README

只出现一次的数字 II

1. 题目描述

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

2. 示例

示例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 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次

3. 解题

  1. 二进制统计 统计每个二进制位上1的出现次数,例如对于以下数: $$(110)_2, (110)_2, (110)_2, (001)_2$$

可统计出,第一个二进制位(最低位)上1的个数为1, 第二个为3, 第三个为3 即为[3, 3, 1]

得出的结果都进行模3, 则得到的结果即为只出现一次的数字的二进制表示 [3%3, 3%3, 1%3] = [0, 0, 1] = 1

对于此种方法来说,需要注意的问题是负数问题

  1. 排序后比较 先将数组排序,排序完成后每次取3个比较,若比较出某个不同值,即为只出现一次的值