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

2021-02-09 19:18

阅读:738

标签:Once   除了   第一个   get   假设   bool   sbit   数组   就是   

题意描述

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

解题思路

一、思路一

使用Set集合,遍历数组,当数字第一次出现时,加入Set,当数字第二次出现时,从Set中删除。最后Set中剩余的元素就是结果,赋值给num1、num2

二、思路二

利用异或运算:两个相同数字异或=0,一个数和0异或还是它本身 。

假设数组中两个不同的值是A、B,将数组中的元素逐个异或,最终结果就是AB异或的结果。

两值的区别是,在二进制表示的情况下,至少有一位不同。我们可以取第一个1所在的位数,将数组分成两部分。

相同的数值一定在同一组,不同的值一定在不同组。将两组值逐个进行异或处理,最终得到两个只出现一次的数值。

    public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
            if(array == null) return ;
            num1[0] = 0;
            num2[0] = 0;
            int bit = 0;
            for(int i=0;i>= 1;		//右移一位
                index ++;		
            }
            return index;
    }
	public boolean isBit(int target,int index){
            return ((target >> index) & 1) == 1;	//第index位是1 返回true
    }

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

标签:Once   除了   第一个   get   假设   bool   sbit   数组   就是   

原文地址:https://www.cnblogs.com/le-le/p/12748694.html


评论


亲,登录后才可以留言!