首页 > 其他分享 >数组中唯一只出现一次的数字

数组中唯一只出现一次的数字

时间:2023-05-09 14:56:07浏览次数:37  
标签:cnt 数字 int 32 唯一 二进制 数组 res

思路

如果一个数字出现 3 次,那么它的二进制表示的每一位也出现三次,如果把所有出现三次的数字的二进制表示的每一位都分别加起来,那么每一位的和都能被 3 整除

  1. cnt[32] 数组存储每一位 1 出现的次数
  2. 遍历数组中所有数,将其二进制表示记录在 cnt 数组里
  3. 遍历 cnt 数组,根据 cnt[i] 能否被 3 整除,推断出答案的二进制的第 i 位是 0 还是 1

复杂度分析

时间复杂度 O(32n),空间复杂度用到了长度为 32 的辅助数组,O(1)

代码

class Solution {
public:
    int findNumberAppearingOnce(vector<int>& nums) {
        int cnt[35];//cnt[i]记录二进制第i位1的个数
        memset(cnt,0,sizeof cnt);
        for(auto num:nums)
        {
            for (int i = 0; i < 32; i ++ )            
                if(num>>i&1)    cnt[i]++;
        }
        
        int res=0;
        for (int i = 0; i < 32; i ++ )
            if(cnt[i]%3)//res二进制第i位为1
                res+=1<<i;
        return res;
    }
};

标签:cnt,数字,int,32,唯一,二进制,数组,res
From: https://www.cnblogs.com/tangxibomb/p/17385011.html

相关文章

  • leetcode-349. 两个数组的交集
    returnnums1.Intersect(nums2);题意:给定两个数组,编写一个函数来计算它们的交集。c#可以用linq自带的方法返回,顺便看了下微软的内部实现:privatestaticIEnumerable<TSource>IntersectIterator<TSource>(IEnumerable<TSource>first,IEnumerable<TSource>second,IEquali......
  • windows批处理如何为个位数字增加或者去掉前导0
    答案来自ChatGPT@echooffsetlocalrem设置字符串set"str=9"rem检查字符串长度if"%str:~1%"==""(set"str=0%str%")echo结果:%str%endlocal在这个示例中,我们首先将字符串9存储在变量str中。然后,我们使用子字符串提取操作%str:~1%来获取字符串的第二个字......
  • 先变二维数组
    //1.先变二维数组//letbaseArray=[1,2,3,4,5,6,7,8,9,10,11,12,13];letlen=results.length//baseArray.length;letn=2;//假设每行显示3个let......
  • 1008 数组元素循环右移问题
    一、问题描述:一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0​A1​⋯AN−1​)变换为(AN−M​⋯AN−1​A0​A1​⋯AN−M−1​)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法......
  • 2023-05-08:我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符, 并
    2023-05-08:我们定义了一个函数countUniqueChars(s)来统计字符串s中的唯一字符,并返回唯一字符的个数。例如:s="LEETCODE",则其中"L","T","C","O","D"都是唯一字符,因为它们只出现一次,所以countUniqueChars(s)=5。本题将会给你一个字符串s,我们需要返回countUnique......
  • Java数组
    Java数组Java中,数组是用来存储固定大小的同类型元素。声明数组变量声明语法:dataType[]arrayRefVar;//首选方法dataTypearrayRefVar[];//效果相同,但不是首选例:double[]myList;doublemyList[];创建数组语法:arrayRefVar=newdataType[arraySize];......
  • 相同数字串视为相同
    相同字符串视为相同字符,去除相同字符串publicList<String>removeSameStr(){List<String>list=newArrayList<>();List<String>result=newArrayList<>();list.add("123abccd");list.add("abcd......
  • 数组中只出现一次的两个数字
    思路设两个数字分别为x,y将所有数字异或起来,得到的结果设为s,s=x^y因为相同两个数字,异或结果为0,由于异或运算满足交换律,因此最后就剩两个数字异或从s的二进制表示中,找到任意为1的位kxy的二进制表示在第k位上,一个是0,一个是1因为xy不同,因此s不为0,一定能......
  • 数字图像处理(绪论)——冈萨雷斯
    一、图像处理的范围  数字图像处理是指借助于数字计算机来处理数字图像。本书范围:其输入和输出都是图像的处理,包含从图像中提取特征的处理,也包含各个目标的识别。二、图像处理的起源起源于从通过海底电缆从伦敦送到纽约(首先使用特殊的打印设备对图片编码,然后在接收端重建这......
  • 如何将数组生成可烧写bin文件
    ASM_CALLISTO_WAVE.bin烧写文件是由wave.bin+ curveTable.bin组成1、先使用工具C2B.exe将对应的TXT文件生成bin文件此工具是正点原子的工具,直接在它的网址下载即可txt文件格式为: 1{64,67,70,73,77} 按如下步骤即可在同文件夹得到同名bin文件 2、合并两个bin文件......