剑指 Offer 56

在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。

示例 1:

输入:nums = [3,4,3,3]
输出:4
示例 2:

输入:nums = [9,1,7,9,7,9,7]
输出:1
 

限制:

1 <= nums.length <= 10000
1 <= nums[i] < 2^31

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        n=len(nums)
        if n==1:return nums[0]
        nums.sort()
        for i in range(n-1):
            if i==0:
                if nums[i+1]!=nums[i]:
                    return nums[i]
            elif i==n-2:
                if nums[i]!=nums[i+1]:
                    return nums[i+1]
            elif nums[i]!=nums[i-1] and nums[i]!=nums[i+1]:
                return nums[i]
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        return (sum(set(nums))*3-sum(nums))//2
class Solution {
    public int singleNumber(int[] nums) {
        int[] cnt=new int[32];
        for(int i=0;i<nums.length;i++){
            for(int j=0;j<32;j++){
                cnt[j]+=(nums[i]>>j&1)==1?1:0;
            }
        }
        int res=0;
        for(int i=31;i>=0;i--){
            res<<=1;
            if(cnt[i]%3==1)res=(res|1);
        }
        return res;
    }
}
原文地址:https://www.cnblogs.com/xxxsans/p/13734822.html