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

guoxinxin guoxinxin     2023-03-11     744

关键词:

题目描述

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

测试序列

 功能测试(数组中有多对重复的数字;没有重复的数字;)

 边界测试(数组小于2)

解题思路

异或运算

一个数字与其本身异或,结果为0。即:a^a=0

一个数字与0异或,结果为其本身。即a^0=a

当只有一个数出现一次时,我们把数组中所有的数,依次异或运算,最后剩下的就是落单的数,因为成对儿出现的都抵消了。

依照这个思路,我们来看两个数(我们假设是AB)出现一次的数组。我们首先还是先异或,剩下的数字肯定是A、B异或的结果,这个结果的二进制中的1,表现的是A和B的不同的位。我们就取第一个1所在的位数(取任意一个1所在位数都可以,因为代表两个只出现一次的数该位不同,可以区分开两个数即可),假设是第3位,接着把原数组分成两组,分组标准是第3位是否为1。如此,相同的数肯定在一个组,因为相同数字所有位都相同,而不同的数,肯定不在一组。然后把这两个组按照最开始的思路,依次异或,剩余的两个结果就是这两个只出现一次的数字。

class Solution 
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) 
        int length = data.size();
        if(length<2)
            return;
        int res=0;
        for(int i=0;i<length;i++)
            res = res ^ data[i];
        
        int k_bit = 1;  //记录最高位的bit
        res = res>>1;
        while(res)
            res = res>>1;
            k_bit = k_bit<<1;
        
        
        *num1 = 0;
        *num2 = 0;
        for(int i=0;i<length;i++)
            if((data[i] & k_bit) == k_bit)
                *num1 = *num1 ^ data[i];
            else
                *num2 = *num2 ^ data[i];
        
        return;

    
;

  

题目描述

一个数组除了一个数字只出现1次,其他的数字都出现了三次,请找出只出现1次的数字。

测试序列

功能测试(唯一只出现1次的数字分别为0、正数、负数;重复出现3次的数分别是0、正数、负数)

特殊输入测试(小于四个元素)

解题思路

 

求数组中只出现一次的两个数字

文章目录一、求数组中只出现一次的两个数字1.题目描述2.题目链接3.解题方法一、求数组中只出现一次的两个数字1.题目描述2.题目链接 查看详情

数组中只出现一次的数字(代码片段)

 *@Description数组中只出现一次的数字*@问题:题目描述*一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。    查看详情

《剑指offer——数组中只出现一次的两个数字,数组中唯一只出现一次的数字》代码(代码片段)

数组中只出现一次的两个数字,数组中唯一只出现一次的数字前言一、示例1.数组中只出现一次的两个数字,2.数组中唯一只出现一次的数字二、代码解析1.新建.cpp文件代码如下(示例):三,测试前言//===&#... 查看详情

《剑指offer》第五十六题i:数组中只出现一次的两个数字(代码片段)

//面试题56(一):数组中只出现一次的两个数字//题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序//找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。#include<cstdio>unsigne... 查看详情

数组中只出现一次的数字

题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 思路:将数字分成两组,每组包含一个只出现一次的数字,再异或求解,时间复杂度为O(logn),空间复杂度为O(... 查看详情

数组中只出现一次的数字

题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。classSolution{public:voidFindNumsAppearOnce(vector<int>data,int*num1,int*num2){if(data.size()==0)return;intres=0;for(inti=0;i<data.size();i++ 查看详情

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

 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 /*考虑过程: 首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两... 查看详情

数组中只出现一次的数字(代码片段)

题目描述一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。思路和那道字符串里面第一次出现唯一字符的题目类似,使用count计数方法;另外百度了一下发现还可以用collect... 查看详情

数组中只出现一次的数字

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;//num1,num2分别为长度为1的数组... 查看详情

剑指offer刷题-自用—数组中只出现一次的数字(代码片段)

1.剑指Offer56-I.数组中数字出现的次数一个整型数组numsnumsnums里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n)O(n)O(n),空间复杂度是O(1)O(1)O(1)。题目要求时间复杂... 查看详情

数组中只出现一次的数

  问题一:在一个整数数组中,除了一个数之外,其他的数出现的次数都是两次,求出现一次的数,要求时间复杂度尽可能的小。例如数组{1,2,2,3,3,6,6},出现一次的数是1.  从题目的描述可以看出,数组中只有一个数字出现了... 查看详情

数组中只出现一次的数字

题目  一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 分析  假设这两个数字为A和B,将数组中的所有数字进行异或,最后结果为all=A^B;然后找到all二进制形式最... 查看详情

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

题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 思路:因为有2个数字只出现了一次,而其他的数字都是2次,可以通过异或运算,得到最后这2个只出现一次的... 查看详情

数组中只出现一次的数字(java实现)

 问题描述一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。  解题思路如果数组中只有一个数字出现奇数次,则将数组中所有的数字做异或可得该数字。数组中... 查看详情

数组中只出现一次的数字(代码片段)

题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。时间复杂度o(n),空间复杂度o(1)publicstaticvoidFindNumsAppearOnce(int[]array,intnum1[],intnum2[])inttemp=0;for(inti=0;i&l... 查看详情

面试题:数组中只出现一次的数字(代码片段)

题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。方法1:哈希表//num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设置为返回结果importjava.util.HashMap;public... 查看详情

牛客(40)数组中只出现一次的数字(代码片段)

//题目描述//一个整型数组里除了两个数字之外,其他的数字都出现了两次。//请写程序找出这两个只出现一次的数字。//num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设置为返回结果publicstaticvoidFindNumsAppearOnce(int[]array,int... 查看详情

剑指offer数组中只出现一次的数字(代码片段)

剑指OFFER数组中只出现一次的数字题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。使用map来记录,出现一次的会被留下来,大于一次的会被擦除,最终一定只剩下两个... 查看详情