首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

数组出现一次的数字

如果数组只一个数字是只出现一次的,其他数字都是成双成对出现的,那么我们从头到尾依次异或数组的每个数字,最终的结果刚好就是那个只出现一次的数字,因为那些成对出现两次的数字全部在异或抵消了。...那么回到我们的题目,因为有两个只出现一次的数字,所以我们可以试着把原数组分成两个子数组,使得每个数组包含一个只出现一次的数字,而其他数字都成对出现两次。...我们还是从头到尾依次异或数组的每个数字,那么最终得到的结果就是两个只出现一次的数字异或的结果。...位都为1,第二个子数组数组第index位都为0,那么只出现一次的数字将被分配到两个子数组中去,于是每个子数组只包含一个出现一次的数字,而其他数字都出现两次。...这样我们就可以用之前的方法找到数组出现一次的数字了。

90120
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    每日一题: 数组数字出现的次数

    链接: 数组数字出现的次数 ---- 该题是“消失的数字”的进阶版,还没接触的读者可以先看这个: 链接:消失的数字 ---- 思路: 我们依然使用异或的方法,只不过这道题需要查找的是两个数字,所以我们得先找到这两个数字的异或数字...: 首先将数组nums的数字异或一遍,得到的就是只出现一次的数字的那两个数字的异或数字。...又因为该题要求要将returnSize改成只出现一次的数字,这里比较简单,就是两个嘛。...所以我们想到一个方法找到这两个数字: 在 n 的二进制位从右到左,找到第一位为1的位数,然后记下这个位为 j,接着把 nums 的所有数依次判断,若在 j 位为1则放到一个数组,为0则放到另一个数组...以这里例一为例,我们上面求出n等于0111,那么第一位为1的就刚刚好是第一位,然后把nums数组第一位为1的放到一个数组,为0的放到另一个数组中去。

    36630

    找出数组出现一次的数字

    一个数组,有一个数字只出现一次,其余的数都出现两次,求出那个单独的数 可以使用异或或来解决这个问题,因为两个相同的数异或之后就是0,0与一个数异或还是这个数,而且异或满足交换律 public static...n ^= arr[i];//与sun+=arr[i]类似,方便理解 } System.out.println(n); } 拓展: 一个数组...,只有两个不同的数字出现一次,其余的数都出现两次,求出那两个只出现一次的数 思路:假设数组是{1,2,3,1},要想找到那两个只出现一次的数,只需要将数组里面所有的数字异或一下,得到结果sum,然后将...sum进行移位操作判断是否为1,如果不为1,依次往后,知道右移到位为1的时候为止,其实就是确定sum从右往左数第几位是1,从而起到筛选的作用, 接下来将数组遍历一遍,判断数组的每个数是否满足移k位结果是否为

    59330

    JavaScript | 获取数组的单词并统计出现次数

    HTML5学堂(码匠):如何通过JavaScrip实现数组元素的查找?在一个数组当中,找到所有的单词,并统计每个单词出现的次数。...功能需求 在一个自定义数组当中,包含多个单词,请使用JavaScipt获取数组的每个单词,并统计出每个单词出现的次数。...功能分析与实现思路 可以借助对象的特性,使用对象属性表示数组的具体单词,使用对象属性的属性值表示相应单词出现的次数。 完整的代码实现 ? 代码输出结果 ?...代码解析 1. sort方法,是针对数组进行排序,这个步骤可以省略,不排序也能够直接输出。 2....通过for循环,检测数组的每个值是否在obj存在,如果不存在,则设置这个属性,并将属性值赋值为1,如果当前obj已存在相应单词,则令属性值+1。 3.

    5.1K70

    每日一题:数组数字出现的次数2

    链接: 数组数字出现的次数2 这道题是前一次博客的另一个版本,想看上一个的链接在下面: 链接: 数组数字出现的次数1 ---- 这道题与上道题不太一样的是这里出现的次数是3次还有1次的,所以异或的方法不太好整...我们想,既然这个数组里面只有一个数字是出现一次,其他是三次,那用一个数组把这些出现三次的数字,把他们每个二进制位统计并相加,会发现这个统计的数组的每个位的数字都会是3的倍数,那如果又多了一个出现一次的数...,那他某个二进制位上统计完加上去,会让这个数组里面某个位的数字变成模3余1,那么就可以找出这个数字为1的进制位,最后再用二进制的运算求出这个数字。...总的来说: 统计出数组的所有的数,从第1位到第32位进制位有多少个1,然后找到数组模3余1的位数,就是这个出现一次的数字的二进制位为1的位数。...j) & 1) == 1) { arr[j] += 1; } } } //看看哪一位是出现一次的

    34310

    常用技巧之JS判断数组某元素出现次数

    现在前端开发经常需要从api获取返回的数组, 也许是array,也许是json, 不管是什么,都需要对返回的数据进行再处理, 其中一个重要且经常用到的操作, 就是“判断重复”及“重复的次数” 例如,...看上面的代码示例,可以很清楚的看到, i循环一个数字,j把整个数组循环了一遍; 那就意味着,数组有多长, 就会用for for嵌套把整个数组循环多少次 那么回来这个判断重复次数的例子来, 我们可以通过...for for循环中的if(arr[j] == temp) 把整个数组的每一项,都和整个数组进行一次比较, 如果相等,就把count++, 然后执行arr[j]=-1,为什么要这么做呢?...这个小例子的重点有三个: 1,通过嵌套for循环,把数组的每一项,跟整个数组的所有项,比较一遍; 2,通过if判断,如果有相等的项,count++,并把相等的项置为-1,这样可以判断等于-1的就是重复的...=-1,决定是否加入新数组,返回。 完了, 很简单吧, 还看不懂的同学,可以用console.log,一步一步的打印结果,帮助理解。 JS判断重复数组是否有重复项

    5.3K80

    剑指offer 数组出现一次的数字

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。...解题思路 我们利用异或的特性,异或两个相同的数字的结果为零,第一遍对数组进行异或的结果是 两个只出现一次的数字的异或值(a^b),并不是我们想要的,所以我们根据这个异或值找到一位为1的位数 (a和b的这个位上的值肯定是不相同的...),按照原始数组中所有数字的这个位是否为1分成两组,这样两组里面有且仅有一个只出现一次的数字,然后再次异或,就能得到a和b 代码 class Solution { public: void FindNumsAppearOnce...(vector data,int* num1,int *num2) { //对数组的数字进行异或 int xorresult=data[0];...length=data.size(); vectorisone; vectoriszero; for(int i=1;i//找出异或结果

    33430

    golang刷leetcode 技巧(16)数组数字出现的次数 II

    在一个数组 nums 除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。...,且这个整数,只有31位 3,我们统计整个数组,1到31位,1的个数,如果mod 3 不是0 说明只出现一次的数据,这一位非零 4,我们将所有非零位组合起来,就是我们所需要的数据 代码实现 func...=0{ res|=1<<i } } return res } 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。...因此lowbit(s)二进制表达式只有一个bit 1....因为异或值s的bit1就是因为两个数字的不同而贡献的. 4,同一组的元素再异或求出不同数字. 出现两次的数字, 肯定出现同一组, 异或后消除掉. */

    53210

    剑指Offer(四十)-- 数组出现一次的数字

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。...遍历完成之后,需要将次数为1的数字捞出来,同样是遍历hashmap,由于只有两个满足条件,我们设置一个标识变量,初始化为1,如果找到第一个满足条件的数字,除了写入放回数组,还需要将该标识置为2,表示接下来找的是第...A和B,初始化异或结果res为0,遍历数组里面所有的数,都进行异或操作,则最后结果res = A^B。...那我们取出异或结果res最低位的1,假设这个数值是temp(temp只有一个位是1,也就是A和B最后不同的位) 遍历数组的元素,和temp进行与操作,如果和temp相与,不等于0。...那就说明它很有可能就是A和B的一个。 只是有可能,其他的数也有可能该位上为1。但是符合这种情况的,其他数肯定出现两次,而A和B只可能有一个符合,并且只有可能出现一次A或者B。

    30020
    领券