题目来源:https://leetcode-cn.com/problems/WGki4K/
大致题意:
给一个数组,其中只有一个数字出现一次,其他数字出现三次,求出出现一次的数
思路
- 遍历整形的所有位数
- 对于每个位数,求出数组所有数该位出现的次数。若出现次数对 3 取余结果为 1,则表示所求数字对应位数为 1
代码:
class Solution {
public int singleNumber(int[] nums) {
int ans = 0;
// 遍历所有位数
for (int i = 0; i < 32; i++) {
int count = 0;
// 遍历数组
for (int num : nums) {
// 求出当前位为 1 的数的个数
if (((num >> i) & 1) == 1) {
count++;
}
}
// 出现次数对 3 取余结果为 1,则所求数该位为 1
if (count % 3 == 1) {
ans |= 1 << i;
}
}
return ans;
}
}
本文介绍了一种高效算法来找出一个特殊数组中的唯一元素。数组中除一个数外,其他数均出现了三次。通过遍历每一位,计算每位上1的总数,并判断是否能被3整除来确定目标数的二进制形式。
327

被折叠的 条评论
为什么被折叠?



