• 40 数组中只出现一次的数字


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

    如果数组中只有一个不同的数,全都异或,有2个的话,想办法把这个数组分成2个子数组
    例如 4 0100 6 0110 异或后为0010,将第二位是1的数分在一个子数组里,其他数分在另一个子数组里,两个子数组 组内的数都异或 剩下的就是不同的数

    假如不同数是3,4

    异或后为7   00111

    -7  10111  符号位不变取反+1 变成11001

    相与得00001

    可以得到7的最低位1

    Java:

     1 //num1,num2分别为长度为1的数组。传出参数
     2 //将num1[0],num2[0]设置为返回结果
     3 public class Solution {
     4     public void FindNumsAppearOnce(int [] data,int num1[] , int num2[]) {
     5         int diff = 0 ;
     6         for(int num : data){
     7             diff ^= num ;
     8         }
     9         diff &= -diff ;
    10         for(int num : data){
    11             if ((num & diff) == 0){
    12                 num1[0] ^= num ;
    13             }else{
    14                 num2[0] ^= num ;
    15             }
    16         }
    17     }
    18 }

    C++:

     1 class Solution {
     2 public:
     3     void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
     4         int diff = 0 ;
     5         for(int num : data){
     6             diff ^= num ;
     7         }
     8         diff &= -diff ;
     9         for(int num : data){
    10             if ((num & diff) == 0){
    11                 num1[0] ^= num ;
    12             }else{
    13                 num2[0] ^= num ;
    14             }
    15         }
    16     }
    17 };
  • 相关阅读:
    springboot中使用swagger
    springboot中使用druid数据库连接池
    springboot连接mysql时出现的错误
    请求路径springmvc中支持ant风格
    mybatis中的<where>和<set>
    spring中Bean装配有关的注解
    spring在web项目中ApplicationContext容器的实例化
    mybatis中resultMap的作用
    mybatis中的别名
    mysql利用LAST_INSERT_ID实现id生成器
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/9021365.html
Copyright © 2020-2023  润新知