/*** 面试题40:数组中只出现一次的数字* 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。*/
public class _40_num_one_times {public static void main(String[] args){Solution40 solution40 = new Solution40();int[] a={2,4,3,6,3,2,5,5};int[] num1={0};int[] num2={0};solution40.FindNumsAppearOnce(a,num1,num2);System.out.println(num1[0]);System.out.println(num2[0]);}
}
//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
class Solution40 {public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {if(array==null||array.length==0){return;}int xorNum=0;//所有数异或操作和,结果为两个不一样数字的异或值,从右往左第一个不为1的位置就是两个不一样数字第一个不同位置的下标。for(int i=0;i<array.length;i++){xorNum=xorNum^array[i];}//找第一个不同的位置int indexEnd=0;while((xorNum&1)==0){xorNum=xorNum>>1;indexEnd++;}//把原始数组分两半分别进行计算for(int j=0;j<array.length;j++){if(((array[j]>>indexEnd)&1)==0){  //第一个出现一次的数字,倒数第indexEnd位  位于1  等于0。num1[0]^=array[j];}else{      //第2个出现一次的数字,倒数第indexEnd位  位于1  等于1。num2[0]^=array[j];}}}
}

转载于:https://www.cnblogs.com/andy-zhou/p/6550007.html

40:数组中只出现一次的数字相关推荐

  1. 【剑指offer-Java版】40数组中只出现一次的数字

    数组中只出现一次的数字:输入一个数组,该数组中有两个数字只出现了一次,其他数字都出现了两次,求出这两个只出现了一次的数字 要求时间复杂度为O(n)空间复杂度为O(1) 考虑一个数组中只有一个数字仅仅出 ...

  2. 剑指offer面试题[40]-数组中只出现一次的数字

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 注意原题目要求空间复杂度为0(1). 位运算的具体思路可以参看剑指offer. class So ...

  3. 【难题+重点】剑指offer——面试题40:数组中只出现一次的数字

    剑指offer--面试题40:数组中只出现一次的数字 Solution1: 书中展示了很棒的思路: 关于异或的两个性质应该知道: (1) X^X = 0; (2) X^0 = X; class Sol ...

  4. 《剑指offer》-- 第一个只出现一次的字符、数组中只出现一次的数字、字符流中第一个不重复的字符、数组中重复的数字

    一.第一个只出现一次的字符: 1.题目: 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写 ...

  5. [剑指offer] 数组中只出现一次的数字

    本文首发于我的个人博客:尾尾部落 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了偶数次.请写程序找出这两个只出现一次的数字. 解题思路 法一:大家都能想到的HashMap法 法二:异或法 ...

  6. 牛客题霸 [数组中只出现一次的数字] C++题解/答案

    牛客题霸 [数组中只出现一次的数字] C++题解/答案 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题解: 用map来记录每个数字出现几次, ...

  7. 数组中只出现一次的数字

    一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 数字都出现两次,则异或肯定为0. 考虑下这个题目的简化版--数组中除一个数字只出现1次外,其它数字都成对出 ...

  8. 【剑指offer】面试题40:数组中只出现一次的数字

    题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路: 因为只有两个只出现一次的数字,所以所有数字进行异或之后得到值res一定不是0.这样,res ...

  9. 面试题40:数组中只出现一次的数字

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 题目分析 剑指Offer(纪念版)P211 ① ...

最新文章

  1. 丁磊建议将少儿编程纳入学业水平考试,是少儿编程太热,还是起跑线焦虑
  2. Transformer升级之路:Sinusoidal位置编码追根溯源
  3. Javascript与服务器同步时间
  4. 5.9 QR分解--Gram-Schmidt 分解
  5. mysql插入实现存在更新_mysql 记录不存在时插入 记录存在则更新的实现方法
  6. mysql 多个实例 备份_Linux下安装Mysql多实例作为数据备份服务器实现多主到一从多实例的备份...
  7. 想成领袖?先瞄准老板身边的位置
  8. Java笔记-使用RabbitMQ的Java接口实现Fair dispatch(公平分发)
  9. 怎样在DOS下查看屏蔽和开启端口了
  10. python开发环境有哪些特点_快速了解Python开发环境Spyder
  11. SpringBoot集成Beetl
  12. Cfree5可以JAVA_Free C++ (and C)
  13. 使用电脑过程中突然无法复制粘贴了
  14. 基于电力行业信息安全基线的量化管理系统研究与应用
  15. 自己的应用跳转到应用宝评分界面
  16. C语言中内嵌汇编asm语法
  17. 世界上第一个便便数据库需要您的帮助!【智能快讯】
  18. web前端需要学习什么?需要掌握什么技术
  19. android11最新版本是多少,Android11正式发布 安卓11正式版系统发布更新时间
  20. 计算机毕业设计Java乒乓球俱乐部管理(源码+系统+mysql数据库+lw文档)

热门文章

  1. centos7设置键盘类型_CentOS 7 系统区域(语言)和键盘设置
  2. C++ 11 新特性(十二)函数新特性、内联函数、const详解
  3. linux系统打开m3u8文件,M3U8 文件扩展名: 它是什么以及如何打开它?
  4. 【lua学习】3.字符串
  5. java转换汇编,请问如何把JAVA程序转为汇编?
  6. linux ffmpeg yum源,ffmpeg最新的yum源地址及视频去logo
  7. 光纤收发器在高清网络视频监控工程项目中的应用
  8. 工业交换机故障分析的原则
  9. 【渝粤教育】国家开放大学2018年春季 0064-22T20世纪欧美文学 参考试题
  10. 【渝粤教育】21秋期末考试财务管理10164k2