一个数组中有两种数出现了奇数次,其他数出现了偶数次,怎么找出打印这两种数

这个问题我们涉及到异或运算 和 怎么将一个数的最右边取出来

有这样一个结论
1.任何数异或0 都为自己本身
2.任何数和自己异或都为0

所以如果有这么一个数组[1,1,2,3,4,4,2,3,2,3,1,1]
我们可以发现2 和 3出现的次数为奇数次
我们将整个数组异或得到的值为 2和3的异或值

00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000011
得到结果为
00000000 00000000 00000000 00000001

我们再将最右边的1取出来可以判定这个属猪可以分为2类
要么00000000 00000000 00000000 00000001 进行& 操作为0的数要么为不为0的数

那么我们就可以写出代码

public static void printOddTimesNum2(int[] arr){int eor = 0;for(int i=0;i<arr.length;i++){eor^=arr[i];}int Right = eor&((~eor)+1); //取出最右边的值int oneAddTimes = 0;for(int i=0;i<arr.length;i++){if((Right & arr[i])!=0){oneAddTimes^=arr[i]; //这里可以得出第一个奇数}}System.out.println(oneAddtimes);System.out.println(oneAddtimes^eor);
}

数组中有两种数出现奇数次,其他数出现偶数次,打印奇数次的数相关推荐

  1. leetcode421. 数组中两个数的最大异或值(贪心算法)

    给你一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n . 进阶:你可以在 O(n) 的时间解决这个问题吗? 示例 1: 输 ...

  2. 有苦有乐的算法 --- 一个数组中,有两种数出现了奇数次,其余数都出现了偶数次,找到这两种数

    题目 一个数组中,有两种数出现了奇数次,其余数都出现了偶数次,找到这两组数 例: [2,4,3,2,5,4] ⇒ [3,5] [1,4,6,3,7,8,3,2,1,2,6,6,7,8] ⇒ [6,4] ...

  3. 已定义了两个整数变量A和B,完成下列功能: (1)若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中(2)若两个数均为奇数,则将两数均加1后存入原变量(3)若两个数均为偶数,则两个变量均不改变。

    已定义了两个整数变量A和B,试编写程序完成下列功能: (1)若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中: (2)若两个数均为奇数,则将两数均加1后存入原变量: (3)若两个数均为偶数,则两 ...

  4. 一个数组实现两个栈(共享栈)

    题目:   一个数组实现两个栈. 方法1:   下标为0的位置为栈1的栈底,下标为1的位置为栈2的栈底,栈1的元素存放在下标为偶数的位置上,栈2的元素放在下标为奇数的位置上.   如上图所示的数组:若 ...

  5. JavaScript-创建数组的两种方法,数组的遍历,lenght获取数组的长度,在数组末尾追加元素

    数组概述 数组是一组相关数据的集合,其中的每一个值被称作元素,每个元素在数组中都有对应的位置(下标)就是元素的索引,通过下标就能很方便的获取对应下标的元素:当我们想要连续存放多个数据时就可以使用数组来 ...

  6. LeetCode简单题之数组中两元素的最大乘积

    题目 给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值. 请你计算并返回该式的最大值. 示例 1: 输入:nums = ...

  7. 动态开辟二维数组的两种方案及位体

    动态开辟二维数组的两种方案及位体 一.在静态二维数组中查询数据 二.动态开辟二维数组空间 1.用二级指针的方式开辟 2.用结构体的方式开辟 三.位体 先来回顾一下动态开辟一位数组的方法: #inclu ...

  8. 动态规划系列---求数组中两个元素差的最大值

    题目 求数组中两个元素差的最大值(后面的元素减去前面的元素):对应实际生活中的股票买卖,找出一只股票走势里面可能的最大收益: 思路 类似于求数组连续和的最大值:  保存最大差值和最小值,遍历数组,如果 ...

  9. JS中有两种自加法操作

    JS中有两种自加法操作.它们的运算符是++,它们的函数是向1添加运算符. 我和我的区别在于操作的顺序和组合的方向. 其中: ++var被称为预自动添加,变量执行自动添加操作后.它的操作是先执行自动加法 ...

最新文章

  1. iOS - APP任意push新页面那些事
  2. matlab中find函数的使用说明
  3. 使用Xshell生成key,避免password登录linux
  4. file_get_contents高級用法
  5. java访问权限 public private protected
  6. OpenShift 4.3 - 基于虚拟机的BareMetal离线安装(1-2)
  7. 面向对象程序设计中“超类”和“子类”概念的来历
  8. centos安装最新的visual studio code并设置中文
  9. 个人博客,个人博客模版,用HTML+CSS做一个漂亮简单的个人网页,个人博客网站html源码
  10. 网页木马是什么原理?
  11. 2008年南京等5城市将升格直辖市
  12. python小游戏:添加武器,查看武器,删除武器
  13. 高德地图功能点使用整理
  14. 宝塔面板怎么实名认证_云服务器安装宝塔面板完整教程
  15. 软件测试基础知识bbst,海盗派测试分析MFQPPDCS海盗派.PDF
  16. 最全收集整理GitHub上受欢迎的Android UI Library
  17. python(x,y)安装和使用
  18. Mac上如何降级系统?Mac系统降级图文教程
  19. 2013-07-26 IT 要闻速记快想
  20. 易语言取c盘文件夹中的文件被占用,易语言检测文件被哪个进程占用的代码

热门文章

  1. 1、JVM之走进类加载
  2. python医院自动化抢号脚本
  3. C语言面试题--已知整形变量在内存中占4个字节的空间,现有一无符号整形变量a = 0x20190125,请编写函数求出变量a所占内存每个字节的值是多少?
  4. web的前端和后端之分
  5. 2022.3.2复盘
  6. WORD插入摄氏华氏度及换算
  7. 你绝对不知道的head标签
  8. PS如何批量处理图片大小
  9. html自动请求favicon,浏览器默认请求的favicon.ico文件,可能带来的问题
  10. Mac怎么创建txt文件?如何设置新建txt的快捷键?