传送门
图解:
复杂度:
-
时间复杂度:O(N),其中 N 位数组 nums 的长度;遍历数组占用 O(N),每轮中的常数个位运算操作占用 O(1);
-
空间复杂度:O(1),数组 counts 长度恒为 32,占用常数大小的额外空间;
代码实现:
function singleNumber(nums: number[]): number {
let res = 0;
for (let i = 0; i < 32; i++) {
let count = 0;
for (let j = 0; j < nums.length; j++) {
// 先将数右移,并求出最后一位为 1 的个数
if ((nums[j] >> i & 1) == 1) {
count++;
}
}
// 找到某一位取余为 1 的数,并左移,为了将这一位循环结束后移至原位
if (count % 3 != 0) {
res = res | 1 << i;
}
}
return res;
};
剑指 Offer 56 - I.数组中数字出现的次数
上一篇