两数交换,数组查找奇数个数的数(位运算)

文章目录

  • 一、异或运算:
    • 1.1 Demo
    • 1.2 面试题

一、异或运算:

1.1 Demo

0和N进行异或运算都等于N

任何一个数和自己异或运算都等于0

且异或运算满足交换率 a^b = b^a

eg: a = 甲 , b = 已 那么则有 a = a^b

​ b = a^b

​ a = a^b

故有: 进行第一个式子之后 则有 a = 甲 ^ 已; b = 已

  												a = 甲 ^已; b = 甲 ^ 已 ^ 已  = 甲 ^ 0;  则b = 甲 因为任意两个相同的数 进行与运算都等于0

​ 此时在进行第二个式子的运算则有:

​ a = 甲 ^ 已 ^ 甲; a = 已;

​ 再进过第三个式子 则有 a = 已; 因为此时 a = 已 ^ 甲 ^ 甲; a = 已;

注意 以上操作的前提是 a和b 在内存中是两个独立的区域

package com.xc.dataStruct.异或运算;/*** @project untitled* @description* @author capture or new* @date 2024/5/24 15:13:58* @version 1.0*/
public class Demo {/***  0和N进行异或运算都等于N*  任何一个数和自己异或运算都等于0*  且异或运算满足交换率 a^b = b^a*  eg: a = 甲 , b = 已  那么则有 a = a^b*                              b = a^b*                              a = a^b*                          故有: 进行第一个式子之后 则有 a = 甲 ^ 已; b = 已*                                                   a = 甲 ^已; b = 甲 ^ 已 ^ 已  = 甲 ^ 0;  则b = 甲 因为任意两个相同的数 进行与运算都等于0*                                                   此时在进行第二个式子的运算则有:*                                                      a = 甲 ^ 已 ^ 甲; a = 已;*                                                   再进过第三个式子 则有 a = 已; 因为此时 a = 已 ^ 甲 ^ 甲; a = 已;**        注意 以上操作的前提是 a和b 在内存中是两个独立的区域**/public static void main(String[] args) {
//        接下来演示两个数的交换测试int a = 10;int b = 40;getSwap(a, b);}private static void getSwap(int a, int b) {a = a^b;b = a^b;a = a^b;System.out.println(a);System.out.println(b);}
}

1.2 面试题

package com.xc.dataStruct.异或运算;/*** @project untitled* @description* @author capture or new* @date 2024/5/24 15:33:26* @version 1.0*/
public class 面试题 {/*** O(n)时间和 O(1)空间* 在一个数组中 一种数出现了奇数次 其他数出现了偶数次 求这个数* 第二问: 两种数出现了奇数次,其他数都出现了偶数次。求这两个数**/public static void main(String[] args) {one();two();}// 第一问  前面说到位运算满足结合律 我们这里 虽然是有很多数,但是奇数个只有一种。我们可以看做将有偶数个个数的数进行先放到一堆进行异或运算后再最后对那个只有奇数个数的数进行异或运算,到最后肯定就只剩下了0^那个数  eg: 3^3^3 = 0^3 = 3public static void one(){int arr[] = {2,3,2,1,5,1,5};int eor = 0;for (int i = 0; i < arr.length; i++) {eor ^= arr[i];}System.out.println(eor);}// 第二问/*** 第一步:首先我们使用eor 从到到尾进行异或运算,因为有两种奇数个个数的数,所以异或到最后肯定只剩下了eor = a^b,且肯定不等于零,a不等于b* 第二步:对于位运算来说 一个整数有32位,我们进行上面的第一轮异或运算后只剩下了a^b,之后我们要获取到这两个数,两个数不相等在位运算中,则定然有这两个中存在某一位不等,一个整数的那个位为0另一个整数的那个数为1.* 第三步:这样我们可以根据位再次将数数组分为两组,一组是那个位为0 的数,一组则是那个位为1的数。之后我们再次创建一个eor` 进行再次与运算这样我们就获取到了a或者是b。* 第四步:这样 eor = a^b, eor` = a。 这样我们又回到了原始状态了的异或运算了。两个数异或运算这样就得到了b。 实现了对两种数的计算了。**/public static void two(){int arr[] = {2,3,2,1,5,1,5,9};// 先使用eor 进行从头到尾进行一次异或运算int eor = 0;for (int i = 0; i < arr.length; i++) {eor ^= arr[i];}// 取出一个不为零的数的最右侧的1  。也就是两组数中不同的哪一位,这里假设为最右侧的哪一位。int rightOne = eor & (~eor + 1);int onlyOne = 0; //eor`for (int i = 0; i < arr.length; i++) {if ((arr[i] & rightOne) == 0){ // 进行与运算,这里我们就是要计算出a 或者是b,只有相同的哪一位才是我们想要的哦。onlyOne ^= arr[i];}}System.out.println(onlyOne + " " +(onlyOne ^ eor));}
}

(位运算)提取出一个不等于零的数的最右侧的1

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/330011.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ACM实训第十七天

Is It A Tree? 问题 考试时应该做不出来&#xff0c;果断放弃 树是一种众所周知的数据结构&#xff0c;它要么是空的(null, void, nothing)&#xff0c;要么是一个或的集合满足以下属性的节点之间有向边连接的节点较多。 •只有一个节点&#xff0c;称为根节点&#xff0c;它…

Skywalking快速介绍

&#xff08;01&#xff09;SkyWalking简介 SkyWalking专为微服务&#xff0c;云原生架构和基于容器&#xff08;Docker&#xff0c;k8s&#xff0c;Mesos等&#xff09;的架构设计的应用程序性能监控工具&#xff0c;用于收集、分析、聚合和可视化来自服务和云原生基础设施的数…

Varjo XR-4功能详解:由凝视驱动的XR自动对焦相机系统

Varjo是XR市场中拥有领先技术的虚拟现实设备供应商&#xff0c;其将可变焦距摄像机直通系统带入到虚拟和混合现实场景中。在本篇文章中&#xff0c;Varjo的技术工程师维尔蒂莫宁详细介绍了这项在Varjo XR-4焦点版中投入应用的技术。 对可变焦距光学系统的需求 目前所有其他XR头…

Android 构建时:Manifest merger failed : Attribute application@name value

在AndroidStudio 构建时发现此问题&#xff1a; Manifest merger failed : Attribute applicationname value解决方案&#xff1a;在主Manifest中增加replace <applicationandroid:name".MyApp"android:allowBackup"false"tools:replace"android…

Linux:Ubuntu修改root密码

Linux&#xff1a;Ubuntu修改root密码 修改默认grub配置文件 rootshanxin:~# vim /etc/default/grub# 主要修改内容如下&#xff1a;GRUB_DEFAULT0 #GRUB_TIMEOUT_STYLEhidden 注释这一行 GRUB_TIMEOUT5 # 将这一行的时间改为5秒进行开启启动的grub文件的复写 rootshanxin:~…

不懂平面设计,这篇文章教你制作商业画册

​商业画册不仅是企业展示形象、推广产品的重要工具&#xff0c;也是设计师展现创意的平台。因此&#xff0c;制作一本高质量的画册对于企业来说至关重要。 那要怎么着手制作呢&#xff1f;以下是关于制作商业画册的步骤。 1.要制作电子杂志,首先需要选择一款适合自己的软件。…

Linux - 整理工作中常用的 Linux 命令(目录、文件、系统、进程、网络)持续更新~

目录 一、Linux 目录结构 二、Linux 中的常用指令 2.1、目录命令 cd 切换目录 pwd 打印当前所在目录 ls 展示当前目录内容 mkdir 创建目录 du 统计每个目录下的文件字节数 2.2、文件命令 which 查找 命令字 所在位置 find 查找文件 touch 创建一个空文件 cp 复制文…

设计软件有哪些?数据交换和导入导出工具篇,渲染100邀请码1a12

设计师制作的项目通常要在各种软件里导入导出&#xff0c;互相交换格式&#xff0c;这次我们介绍一些数据交换和导入导出工具。 1、OBJ OBJ&#xff08;Object File Format&#xff09;是一种常用的3D模型文件格式&#xff0c;用于存储和交换三维模型数据。它由一系列文本行组…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-18讲 高精度延时定时器GPT

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

前端 CSS 经典:元素倒影

前言&#xff1a;好看的元素倒影&#xff0c;可以通过-webkit-box-reflect 实现。但有兼容问题&#xff0c;必须是 webkit 内核的浏览器&#xff0c;不然没效果。但是好看啊。 效果图&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"&g…

VUE3好看的酒网站模板源码

文章目录 1.设计来源1.1 首页界面1.2 十大名酒界面1.3 名酒新闻界面1.4 联系我们界面1.5 在线留言界面 2.效果和结构2.1 动态效果2.2 代码结构 3.VUE框架系列源码4.源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/detai…

【C++初阶】—— 类和对象 (下)

&#x1f4dd;个人主页&#x1f339;&#xff1a;EterNity_TiMe_ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 类和对象 1. 运算符重载运算符重载赋值运算符重载前置和后置重载 2. 成员函数的补充3. 初始化列…

Java中String类常用方法

写笔记记录自己的学习记录以及巩固细节 目录 1.String类的常用方法 1.1 字符串构造 1.2 String对象的比较 1.2.1 比较两个字符串是否相等 1.2.2 比较两个字符串的大小 1.3 字符串查找 1.4 字符串的转化 1.4.1 字符串转整数 1.4.2 字符串转数字 1.4.3 大小写的转换 1…

IT革命浪潮:技术革新如何改变我们的生活与工作

一、技术革新与行业应用 当前的IT行业正处于前所未有的技术革新阶段。其中&#xff0c;量子计算和虚拟现实是两项引人注目的技术。 量子计算&#xff1a;量子计算以其超越传统计算的潜力&#xff0c;正在逐步从理论走向实践。在材料科学、药物研发和气候模型等复杂计算领域&a…

利用kubeadm安装k8s集群 以及跟harbor私有仓库下载镜像

目录 环境准备 master&#xff08;2C/4G&#xff09; 192.168.88.3 docker、kubeadm、kubelet、kubectl、flannel node01&#xff08;2C/2G&#xff09; 192.168.88.4 docker、kubeadm、kubelet、kubectl、flannel node02&#xff08;…

Ansible自动化运维中的file文件模块模块应用详解

作者主页&#xff1a;点击&#xff01; Ansible专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年5月21日15点21分 &#x1f4af;趣站推荐&#x1f4af; 前些天发现了一个巨牛的&#x1f916;人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xf…

向npm发布自己写的vue组件,使用vite创建项目

向npm发布自己写的vue组件&#xff0c;使用vite创建项目 创建项目 pnpm create vite输入项目名称 由于我的组件是基于 ant-design-vue和vue的&#xff0c;需要解析.vue文件&#xff0c;我又安装了下面4个。 然后执行 pnpm i安装依赖 vite.config.ts import { defineC…

linux系统——ps命令的两种参数模式

ps命令后面接参数时&#xff0c;有“—”符号与无此符号&#xff0c;在具体实现功能上有很大区别 能够清晰表达进程之间层级关系

前端菜鸡,对于35+程序员失业这个事有点麻了

“经常看到30岁程序员失业的新闻&#xff0c;说实话&#xff0c;有点麻。目前程序员供求关系并未失衡&#xff0c;哪怕是最基础的前端或者后台、甚至事务型的岗位也是足够的。 事实上&#xff0c;现在一个开出的岗位要找到一位尽职尽责能顺利完成工作的程序员并不是一件那么容…

从零到一:手把手教你将项目部署上线-环境准备

部署步骤 引言1.Java环境配置2.ngnix安装好书推荐 引言 将自己的项目从本地开发环境顺利部署上线&#xff0c;是每个开发者必经的里程碑。今天&#xff0c;我们就从零开始&#xff0c;一步一步教你如何将手中的项目部署到线上&#xff0c;让全世界见证你的创造力。 首先&#x…