链接:
https://leetcode.com/problems/single-number-ii/
大意:
给定一个数组nums,数组中除了一个数字只出现了1次,其余数字都出现了3次。要求找出这个数字,最好时间复杂度为O(n),空间复杂度为O(1)。例子:
思路:
顺势而来的是一种使用32长度的整型数组思路。
- 构造一个整型数组bytes。 bytes[i]意为nums中每个数的二进制表示在第i位的和
- 由于除了一个数字只出现了1次,其余数字都出现了3次。则对于bytes[i]要么是3的倍数,要么是3的倍数加1
- 如果bytes[i]是3的倍数,则只出现了1次的那个数在该位为0;否则在该位为1
- 最后构造出这个数字
代码:
// 使用额外储存空间
class Solution {
private final int MOD = 3; // MOD:数组中除了一个数只出现一次,其余数字都出现了MOD次
public int singleNumber(int[] nums) {
int[] bytes = new int[32];