当前位置 博文首页 > 文章内容

    剑指 Offer 56 - II. 数组中数字出现的次数 II

    作者: 栏目:未分类 时间:2020-09-26 13:59:56

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    在一个数组 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;
        }
    }