zoukankan      html  css  js  c++  java
  • JZ40 数组中只出现一次的数字

    数组中只出现一次的数字

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

    思路:

    这一题属于位运算的题目,两个数如果相同那么异或运算就为0,将一个变量初始化为0,再与其他数进行异或,不会改变结果,记住一定要记住异或是加法运算。
    第一遍全部异或后,得到一个数flag,因为flag一定是两个不同的数异或得到的,那么flag等于1的那一位一定可以将这两个数分开,那么我们再用一次异或就分别找到了这两个数。
     
    func FindNumsAppearOnce(data []int) []int {
        flag := 0
        for i := 0;i < len(data);i++ {
            flag ^= data[i]
        }
        bitflag := 1
        bitflag = flag - (flag & (flag - 1))
        left, right := 0, 0        
        for i := 0;i < len(data);i++ {
            if (data[i] & bitflag) != 0 {
                 left ^= data[i]             
            } else {
                right ^= data[i]
            }
        }
        if left > right {
            left, right = right, left 
        }
        return []int{left, right}
    }
  • 相关阅读:
    [恢]hdu 2005
    [恢]hdu 2004
    [恢]hdu 1093
    [恢]hdu 1092
    [恢]hdu 2008
    [恢]hdu 1091
    [恢]hdu 2006
    [恢]hdu 1089
    [恢]hdu 1094
    OGRE小记
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/14641126.html
Copyright © 2011-2022 走看看