当前位置: 首页 > news >正文

剑指offer面试题40 数组中只出现一次的数字

考察点

异或运算,与运算

知识点

题目

分析
本题目要求数组中只出现一次的俩个数字,并且要求O(1)时间复杂度和空间复杂度。试想一下如果只有一个数字出现一次,那么针对全部元素做异或运算就可以了,因为相同元素异或为0。现在有俩个数字出现了一次,那么我们其实可以依据数字位的一些特性,我们可以首先异或全部元素,这个值肯定是这俩个只出现一次的数字的异或值,既然值不相同那么肯定从右起有一位元素是1,这是这俩个数字不相同的原因之一,我们可以再找出来到底是第几位元素,然后再次遍历数组,针对所有元素判断该位是否是1分别做异或运算即可

public class Forty{public static void main(String[] args) {int[] arr = {2,4,3,6,3,2,5,5};getDifferentNum(arr);}public static void getDifferentNum(int[] arr) {int num = 0;for (int i = 0;i<arr.length;i++) {num = num ^ arr[i];}//找到右起第一位不是0的int cnt = 0;int oneNum = 1;while(oneNum > 0) {if((num & oneNum) == 0) {cnt++;} else {break;}oneNum = oneNum << 1;}int numA = 0;int numB = 0;for(int i = 0;i<arr.length;i++) {oneNum = 1;if(((oneNum << cnt) & arr[i]) == 0) {numA = numA ^ arr[i];} else {numB = numB ^ arr[i];}}System.out.println(numA);System.out.println(numB);}
}
http://www.lryc.cn/news/322265.html

相关文章:

  • gitLab server version 13.12.1 is not supported
  • 如何在 iPhone 上使用蓝牙鼠标
  • matlab simulink 电力系统同步发电机励磁系统的建模与仿真
  • AI新工具(20240320) AI创作一首属于自己的音乐; 轻松制作具有透明背景的高质量图像
  • IT服务ITIL4 认证:助力企业数字化转型的必杀技!
  • 微软聘请了谷歌DeepMind的联合创始人
  • JavaMySQL高级一(下)
  • HCIA复习
  • 5G里面NR,gNB,en-gNB,ng-eNB是什么意思
  • android 网络检测简单方法
  • 列表(list)篇(二)
  • Python的反射机制
  • Python数学建模-2.9Matplotlib库
  • 【MySQL】数据库的基础概念
  • Linux:离线安装 jdk-8(配置Java环境)
  • 【DP】第十三届蓝桥杯省赛C++ B组《李白打酒加强版》(C++)
  • 数据结构试卷第九套
  • 【Linux第三课-基础开发工具的使用】yum、vim、gcc/g++编译器、gdb、Make/Makefile编写、进度条程序、git命令行简单操作
  • Redis:ClassCastException【bug】
  • JSON 配置文件
  • 由浅到深认识Java语言(6):控制流程语句
  • lv17 安防监控项目实战 3
  • 文本处理基本方法
  • Java面试题(Spring篇)
  • 操作系统:malloc与堆区内存管理
  • javaSwing推箱子游戏
  • JAVA多线程之JMM
  • Windows10 专业版 系统激活
  • C#使用LINQ和EF Core
  • 数字人解决方案— SadTalker语音驱动图像生成视频原理与源码部署