题:https://leetcode.com/problems/single-number-ii/
题目大意
给定array,其中有一个元素只出现了1次,其他元素都出现了3次。
思路
求和 减去
(set(array)*3 - array)/2 作为答案。
class Solution {
public int singleNumber(int[] nums) {
Set<Long> set = new HashSet();
Long sum = 0L;
for(long num:nums){
sum += num;
set.add(num);
}
Long ssum = 0L ;
for(long num:set){
ssum += num;
}
return (int)((ssum*3 - sum)/2);
}
}
位运算
对于 ^ 位运算,两个位 加运算但不进位。
对于三个元素,可以认为构造一种运算 使得 1 ,1 ,1相加时为0,思路是%。
class Solution {
public int singleNumber(int[] nums) {
int res = 0;
for(int i = 0 ;i < 32 ;i++){
int tsum = 0;
for(int num : nums){
tsum +=(num>>>i)&1;
}
tsum %=3;
res = res|(tsum<<i);
}
return res;
}
}
本文针对 LeetCode 上的 '单一数字 II' 问题提供了两种解决方案:一种使用集合和数学运算来找到唯一的数字;另一种利用位运算,通过逐位累加并取模的方式找出只出现一次的数字。


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



