算法与数据结构练习——异或

知识点讲解:

一、异或操作定义:

异或是指相同为0,不同为1,也可理解为无进位相加!! 很重要!!

二、关于异或运算的几个性质:

1.0^N=N        (0和任何数异或都是原来的数)

2.N^N=0        (任何数异或自己都是0)

3.满足交换律和结合律:

所以无论怎么改变顺序,最后的结果都是一样的!!

4.重要!!!!

 刷题:

一、第一题:只出现一次的数字1

1.题目描述:

2.分析题目:

这个题目还比较简单哈,直接应用我上边的异或的一些性质,以及联系题目的描述,就知道用异或是最方便的,偶数次出现的数都会被消掉,最后留下来的肯定就是基数次出现的那个数辣,所以用for循环就可以求解了,一遍过哈

3.题解:

class Solution {public int singleNumber(int[] nums) {int sum=nums[0];for(int i=1;i<nums.length;i++){sum=sum^nums[i];}return sum;}
}

二、第二题:丢失的数字

1.题目描述:

2.分析题目:

这个题目可以参考我的上边的异或运算的第三个性质,整体异或和  异或上   整体中部分的异或和   等于整体-部分的那部分数字的异或和,我刚开始写这个题目没有想到这个知识点,以为把这部分的结果异或出来就是缺失的那部分值了,但是显然不是,测试点只过了一个,所以代码如下:

3.题解:

由于0异或任何数都等于原来的那个数,所以这里可以放心的初始化数据为0

class Solution {public int missingNumber(int[] nums) {int ErAll=0;int Erpart=0;//由于0异或任何数都等于原来的那个数,所以这里可以放心的初始化数据为0for(int i=0;i<nums.length;i++){ErAll^=i;Erpart^=nums[i];}ErAll^=nums.length;return ErAll^Erpart;}
}

三、第三题:只出现一次的数字3

1.题目描述:

2.分析题目:

这个题目和第一个题目一样,难道是要卡时间复杂度么,这里好像是nums[i]范围有了一定的变化,我天,惹,好像是这里是两个元素只出现了一次,所以困难就是如何通过这个最后异或结果得到的a^b来把最后的a和b分别计算出来,例如题目中的nums1这个数组:

那么3和5异或的结果就是0110,结果最右边的1就代表他们这个位置上的0还是1是不一样的,那么我们就可以知道这个数组中一定可以分为这个位置是0还是1的两部分数字

那么:

第一类  这个第i个位置上是0   A组

第二类  这个第i个位置上是1   B组

因为无论偶数次出现的数字这个位置是什么,他们一定要么分到A组,要么分到B组,而且还都是偶数次出现的,所以这样把他们分类之后,A组和B组就又像第一题里边一样,只有一个只出现一次的数字了,所以把这个组里边的数字异或出来就是要求得的其中一个结果

最后这个结果和最开始把所有数字都异或的结果相异或,就得到了另一个数字结果

这样就求出来了

补充:如何找到int类型的数字最靠右的1

3.题解:

惹,错误答案,只过了6个测试点:

class Solution {public int[] singleNumber(int[] nums) {int result=0;int result1=0;for(int i=0;i<nums.length;i++){result^=nums[i];}//找到最右边的第一个1int right=result&(-result);for(int i=0;i<nums.length;i++){if((right ^ nums[i])!=nums[i])result1^=nums[i];}int b=0;b=result1^result;return new int[]{result1,b};}
}

惹,好家伙,只需要把判断阵营那里的代码修改一下就可以了,改成下面的:

    if((right & nums[i])!=0)result1^=nums[i];

但是为啥异或不等于它本身不能用来判断阵营啊??

0110----->0010

0010

0001

我知道了,笑死我了,这样怎么可能等于本身,直接等于0了,笑死,因为你看,上边---->符号右边的就是得出来的那个最右边为1的那个数,我想的是如果其他数不为0,那么异或出来肯定还是本身啊,那么就只需要管判断阵营的那个数字是啥了,那么就分两种情况

???不对啊,就是不是它本身,不是它本身就说明不是它的阵营,哦对,不同阵营就会被判成1,还是不是和原来一样,所以确实搞错了

========分割线,上边在胡言乱语哈,纯属心理博弈:

其实我的做法问啥错呢,因为我把异或结果是否是本身作为了这个衡量标准,但是你想,除了要判断的那位数,其他位置上的数确实因为与0相异或而没变,但是如果要判断的那个位置上是0,与1异或,结果就是1,如果位置上是1,那么结果就是0,总而言之,无论是哪一种阵营里边的数,其实异或之后都绝对不是它本身,所以这个解法是错的,

所以还是&之后结果是0还是不是0,更能作为判断依据

ok,今天就写到这,下班,

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

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

相关文章

计算机的错误计算(一百六十九)

摘要 探讨 MATLAB 中一个不动点的计算精度问题。 不动点是一类特殊的循环迭代。它有形式 例1. 已知迭代[1] 计算 显然&#xff0c;每个 均为 0.5 . 下面看看 MATLAB 的计算结果。不妨不用循环语句&#xff0c;直接用算术表达式表示 这时计算结果在如下图片&#xff1a; …

11.25.2024刷华为OD

文章目录 HJ76 尼科彻斯定理&#xff08;观察题&#xff0c;不难&#xff09;HJ77 火车进站&#xff08;DFS&#xff09;HJ91 走格子方法&#xff0c;&#xff08;动态规划&#xff0c;递归&#xff0c;有代表性&#xff09;HJ93 数组分组&#xff08;递归&#xff09;语法知识…

思科实现网络地址转换(NAT)和访问控制列表(ACL)和动态路由配置并且区分静态路由和动态路由配置。

实验拓扑(分为静态路由和动态路由两种) 静态路由互通 动态路由互通 实验背景 这个是想实现外网与内网的连接跟网络的探讨&#xff0c;最终实现互通以及使用并且在网络地址转换后能使用网络然后再这个基础上再配置访问控制列表和网络地址转换的的学习过程。 实验需了解的知识…

Idea 2024.3 突然出现点击run 运行没有反应,且没有任何提示。

写这篇文章的目的是为了提供一个新的解决思路&#xff0c;因为存在同病不同原因。 如果你进行了1. 检查运行配置 (Run Configuration) 2. 清理和重建项目 3. 清除缓存并重启 IDEA 4.排除kotlin 5.重装idea等等操作之后仍然没有解决&#xff0c;可以试着按一下步骤进行解决。 检…

数据结构--树二叉树顺序结构存储的二叉树(堆)

前言 前面我们学习了顺序表、链表、栈和队列&#xff0c;这些都是线性的数据结构。今天我们要来学习一种非线性的数据结构——树。 树的概念及结构 树的概念 树是一种非线性的数据结构&#xff0c;是由n&#xff08;n≥0&#xff09;个有效结点组成的一个具有层次关系的集合…

qt QProxyStyle详解

1、概述 QProxyStyle是Qt框架中QStyle类的一个子类&#xff0c;它提供了一种代理机制&#xff0c;允许开发者在不直接修改现有样式&#xff08;QStyle&#xff09;实现的情况下&#xff0c;对样式行为进行定制或扩展。通过继承QProxyStyle&#xff0c;开发者可以重写其虚方法&…

STL基本算法之copy与copy_backward

copy 不论是对客端程序或对STL内部而言&#xff0c;copy()都是一个常常被调用的函数。由于copy进行的是复制操作&#xff0c;而复制操作不外乎应用assignment operator或者copy construct(copy 算法用的是前者)&#xff0c;但是某些元素型别拥有的是trivial assignment operato…

不可分割的整体—系统思考的微妙法则

不可分割的整体——系统思考的微妙法则 作为企业领导者&#xff0c;我们经常需要做出决策&#xff0c;但有时候&#xff0c;我们会忽略一个事实&#xff1a;每个决策都不是孤立的&#xff0c;它背后都是一个复杂系统的一部分。 无论是市场动态、团队协作&#xff0c;还是产品…

云计算基础-期末复习

第一章&#xff1a;云计算概论 一、云计算的定义与特征 1. 定义&#xff1a; 云计算是一种通过网络以按需、可扩展的方式获取计算资源和服务的模式。它将计算资源视为一种公用事业&#xff0c;用户可以根据需求动态获取和释放资源&#xff0c;而无需了解底层基础设施的细节。…

基于Java的小程序电商商城开源设计源码

近年来电商模式的发展越来越成熟&#xff0c;基于 Java 开发的小程序电商商城开源源码&#xff0c;为众多开发者和企业提供了构建个性化电商平台的有力工具。 基于Java的电子商城购物平台小程序的设计在手机上运行&#xff0c;可以实现管理员&#xff1b;首页、个人中心、用户…

【机器学习】机器学习的基本分类-监督学习-逻辑回归-对数似然损失函数(Log-Likelihood Loss Function)

对数似然损失函数&#xff08;Log-Likelihood Loss Function&#xff09; 对数似然损失函数是机器学习和统计学中广泛使用的一种损失函数&#xff0c;特别是在分类问题&#xff08;例如逻辑回归、神经网络&#xff09;中应用最为广泛。它基于最大似然估计原理&#xff0c;通过…

Milvus 2.5:全文检索上线,标量过滤提速,易用性再突破!

01. 概览 我们很高兴为大家带来 Milvus 2.5 最新版本的介绍。 在 Milvus 2.5 里&#xff0c;最重要的一个更新是我们带来了“全新”的全文检索能力&#xff0c;之所以说“全新”主要是基于以下两点&#xff1a; 第一&#xff0c;对于全文检索基于的 BM25 算法&#xff0c;我们采…

RHCE作业五-shell脚本

一要求&#xff1a; 通过shell脚本分析部署nginx网络服务 1.接收用户部署的服务名称 2.判断服务是否安装 ​ 已安装&#xff1b;自定义网站配置路径为/www&#xff1b;并创建共享目录和网页文件&#xff1b;重启服务 ​ 没有安装&#xff1b;安装对应的软件包 3.测试 判断服务…

分页查询日期格式不对

方式一:在属性上加入注解&#xff0c;对日期进行格式化 方式二:在 WebMvcConfiguration 中扩展Spring MVC的消息转换器&#xff0c;统一对日期类型进行格式化处理 /*** 统一转换处理扩展spring mvc* 后端返回前端的进行统一转化处理* param converters*/Overrideprotected voi…

深度学习3:数据预处理使用Pandas与PyTorch的实践

文章目录 导读一、主题与提纲1.1. 读取数据集1.2. 处理缺失值1.3. 转换为张量格式 二、结论 本文是经过严格查阅相关权威文献和资料&#xff0c;形成的专业的可靠的内容。全文数据都有据可依&#xff0c;可回溯。特别申明&#xff1a;数据和资料已获得授权。本文内容&#xff0…

Tülu 3:重新定义开源大模型的后训练范式

一、引言 在大型语言模型&#xff08;LLM&#xff09;的发展历程中&#xff0c;预训练阶段往往受到最多关注&#xff0c;动辄需要数百万美元算力投入和数万亿token的训练数据。然而&#xff0c;一个鲜为人知但同样关键的事实是&#xff1a;预训练完成的模型实际上并不能直接投…

【机器学习】机器学习的基本分类-监督学习-逻辑回归(Logistic Regression)

逻辑回归是一种分类算法&#xff0c;尽管名字中包含“回归”&#xff0c;但其主要用于解决二分类和多分类问题。它通过学习一个逻辑函数&#xff0c;预测输入属于某个类别的概率。 1. 逻辑回归的基本概念 目标 逻辑回归的目标是找到一个函数 h(x)&#xff0c;输出一个概率值 …

PyMOL操作手册

PyMOL 操作手册 The man will be silent, the woman will be tears. – itwangyang ​ 翻译整理&#xff1a;itwangyanng 2024 年 11月 29 日 目录 初识 PyMOL… 5 0.1 安装 PyMOL… 5 0.1.1 Windows 系统开源版 PyMOL 的安装… 5 0.1.2 教育版 PyMOL 的下载安装……

麒麟系统x86安装达梦数据库

一、安装准备前工作 操作系统&#xff1a;银河麒麟V10&#xff0c;CPU&#xff1a; x86_64 架构 下载地址&#xff0c;麒麟官网&#xff1a;https://www.kylinos.cn/ 数据库&#xff1a;dm8_20220915_x86_kylin10_64 下载地址&#xff0c;达梦数据库官网&#xff1a;https://…

Hot100 - 搜索二维矩阵II

Hot100 - 搜索二维矩阵II 最佳思路&#xff1a; 利用矩阵的特性&#xff0c;针对搜索操作可以从右上角或者左下角开始。通过判断当前位置的元素与目标值的关系&#xff0c;逐步缩小搜索范围&#xff0c;从而达到较高的效率。 从右上角开始&#xff1a;假设矩阵是升序排列的&a…