最佳答案
AcWing 74. 数组中唯一只出现一次的数字
class Solution {
public:
int findNumberAppearingOnce(vector[HTML_REMOVED]& nums) {
//vector[HTML_REMOVED] a;
unordered_map[HTML_REMOVED] res;
for(int i = 0;i < nums.size();i ) res[nums[i]];
for(unordered_map[HTML_REMOVED]::iterator iter=res.begin();iter!=res.end();iter++)
{
// 如果value=1,输出key值并压入a容器中
if(iter->second == 1) return iter->first;
}
//return a;
}
};
发布于 2020-02-16
最佳答案
AcWing 74. 数组中唯一只出现一次的数字——Java
算法1
(位运算) $O(n)$
计算所有数字每一位的个数bitCount,bitCount除以3的余数就是只出现一次的数对应位上的数。
Java 代码
class Solution {
public int findNumberAppearingOnce(int[] nums) {
int ans = 0;
for(int i=0;i<32;i++) {
int bitCount = 0;
for(int j=0;j
if (((nums[j] >> i) & 1) == 1) {
bitCount++;
}
}
if(bitCount % 3 == 1) {
ans |= 1 << i;
}
}
return ans;
}
}
发布于 2020-02-16
最佳答案
AcWing 74. 数组中唯一只出现一次的数字-java
java 代码
class Solution {
public int findNumberAppearingOnce(int[] nums) {
int[] bitSum = new int[32]; //int在二进制下是32位
for (int num : nums) { //外层循环遍历数组的每个数
int bitMask = 1; //数和bitMask & ,则对应位不为1就为0
for (int j = 31; j >= 0; j--) { //判断每个数的32个位置上的数是1还是2
int bit = num & bitMask;
if (bit != 0) bitSum[j] += 1; //若为1则对应加上1
bitMask = bitMask << 1;
}
}
StringBuilder s1 = new StringBuilder();
for (int i = 0; i < 32; i++)
s1.append(bitSum[i] % 3);
String s2 = s1.toString();
return Integer.parseInt(s2, 2); //二进制字符串转化为十进制整数
}
}
发布于 2020-02-16
最佳答案
AcWing 74. 数组中唯一只出现一次的数字
class Solution {
public int findNumberAppearingOnce(int[] nums) {
Map[HTML_REMOVED]map=new HashMap;//根据Map集合的特点进行解答
for(int i:nums){//遍历数组将数组的元素存在Map集合的k值
if(map.containsKey(i)){//判断数组元素是否已经存在Map集合中
Integer value=map.get(i);
value++;
map.put(i,value);
}else
map.put(i,1);
}
int d=0;
Set[HTML_REMOVED]set=map.keySet();
for(int i:set){
if(map.get(i)==1)
d=i;
}
return d;
}
}
发布于 2020-02-16
最佳答案
AcWing 74. 数组中唯一只出现一次的数字--python
python3 代码
class Solution(object):
def findNumberAppearingOnce(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
count = [0] * 32 # 统计每1个二进制位上,1出现的次数
for num in nums:
k = 0
while k < 32:
count[k] += num >> k & 1
k += 1
res = 0
for i in range(32):
# 因为其他数字都出现了三次,只有一个数字出现了一次
# 也就说明count[i]%3等于0或1
res += count[i] % 3 * 2 ** i
return res
发布于 2020-02-16
最佳答案
AcWing 74. 数组中唯一只出现一次的数字
题目描述
blablabla
样例
blablabla
算法1
(暴力枚举) $O(n)$
状态机连续遇到n个1以后变为0,遇到0直接变为0
时间复杂度分析:blablabla
C++ 代码
class Solution {
public:
int findNumberAppearingOnce(vector& nums) {
int one=0,two=0;
for(auto x:nums)
{
one=(one^x)&~two;
two=(two^x)&~one;
}
return one;
}
};
算法2
(暴力枚举) $O(n^2)$
blablabla
时间复杂度分析:blablabla
C++ 代码
blablabla
发布于 2020-02-16
最佳答案
AcWing 74. 数组中唯一只出现一次的数字
sort完之后,3个一组,如果头尾不等,说明单独的数在这三个数中
如果头和右一位数相等 尾即为答案 否则头为答案
class Solution {
public:
int findNumberAppearingOnce(vector[HTML_REMOVED]& nums) {
sort(nums.begin(),nums.end());
for(int i=0;i
if(nums[i]!=nums[i+2]) {
if(nums[i]!=nums[i+1]) return nums[i];
return nums[i+1];
}
}
}
};
发布于 2020-02-16
最佳答案
AcWing 74. 数组中唯一只出现一次的数字
算法
看每一位1的数量
C++ 代码
class Solution {
public:
int findNumberAppearingOnce(vector& nums) {
int ans = 0;
for (int i = 31; i >= 0; --i) {
int cnt = 0;
for (int x: nums) {
if (x >> i & 1) {
cnt ++;
}
}
if (cnt % 3 == 1) {
ans = (ans * 2) + 1;
}
else {
ans = ans * 2;
}
}
return ans;
}
};
发布于 2020-02-16
最佳答案
AcWing 74. 数组中唯一只出现一次的数字-java
java 代码
class Solution {
public int findNumberAppearingOnce(int[] nums) {
int len = nums.length;
int[] a = new int[32];
for(int i = 0; i
int j = 0;
int t = nums[i];
while(t!=0){
if((t&1)!=0)
a[j]++;
j++;
t = t >> 1;
}
}
int re = 0;
for(int i = 0; i<32; i++){
a[i] = a[i]%3;
re = re+ a[i]* (int)Math.pow(2, i);
}
return re;
}
}
发布于 2020-02-16
最佳答案
AcWing 74. Python 装x解法 数组中唯一只出现一次的数字
Life is short.
class Solution(object):
def findNumberAppearingOnce(self, nums):
a = b = 0
for n in nums:
a = (a ^ n) & ~b
b = (b ^ n) & ~a
return a
发布于 2020-02-16