只出现一次的数字 II
- 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。
示例 1:
输入:nums = [2,2,3,2]
输出:3
示例 2:
输入:nums = [0,1,0,1,0,1,99]
输出:99
解题思路
要找到一个整数数组中唯一出现一次的元素,其余元素都出现三次,我们可以使用位操作的方法。 这种方法利用了数字在计算机中是以二进制形式存储的特性,通过统计每一位上出现1的次数来解决这个问题。
- 使用32位整数来表示所有的数字。对于每一位,统计所有数字在这一位上出现1的次数。
- 由于其余每个元素都出现三次,如果某一位上1出现的次数不是3的倍数,那么那个只出现一次的数字在这一位上必然是1。
Java实现
public class SingleNumberII {
public int singleNumber(int[] nums) {
int[] bitCount = new int[32];
// 统计每一位上1的出现次数
for