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

    题目描述

    一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
     
    解题思路:
    思路一:
    常规思路,用map记录所有数字出现的次数,找到只出现1次的数字。
    思路二:
    思路清奇,使用异或运算。由于除了两个数字不同外,其他都是成对出现的,那么将所有数字进行异或以后,这个数字其实就是两个不同数字的异或结果。
    我们找到这个数字最低位为1的位置为p,然后遍历所有数字,判断其他数字位置p是否为1进行区分,然后将为1的数字异或累计、将为0的数字异或累计。
    最后的结果就是所求两个数字。
    class Solution {
    public:
        void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
            int n = data.size();
            if(n < 2) return ;
            int num = data[0];
            for(int i=1; i < n; i++){
                num = num ^ data[i];
            }
            if(num == 0) return ;
            int idx = 0;
            while((num & 1)==0){
                idx++;
                num = num >> 1;
            }
            *num1=0;
            *num2=0;
            for(int i = 0; i < n; i++){
                if(((data[i]>>idx)&1) == 0){    
                    //这里判断0与1都可以,只是为了区分而已
                    *num1 ^= data[i];
                }else{
                    *num2 ^= data[i];
                }
            }
        }
    };    
    

      

     
  • 相关阅读:
    canvas小球动画
    JS闭包
    视图&&事务&&索引&&触发器&&流程控制
    多表关系和查询
    表操作和mysql支持的数据类型
    models模型层进阶
    模型层之聚合查询&&分组查询&&查询&&Q查询&&事务&&查询优化
    models模型层环境配置和表查询
    模型层之orm介绍
    views视图层
  • 原文地址:https://www.cnblogs.com/chengsheng/p/10683844.html
Copyright © 2011-2022 走看看