LeetCode-1486. 数组异或操作【位运算 数学】

LeetCode-1486. 数组异或操作【位运算 数学】

  • 题目描述:
  • 解题思路一:暴力很简单。
  • 解题思路二:优化!时间复杂度:O(1)。注释丰富,明了。
  • 解题思路三:精简版!

题目描述:

给你两个整数,n 和 start 。

数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length 。

请返回 nums 中所有元素按位异或(XOR)后得到的结果。

示例 1:

输入:n = 5, start = 0
输出:8
解释:数组 nums 为 [0, 2, 4, 6, 8],其中 (0 ^ 2 ^ 4 ^ 6 ^ 8) = 8 。
“^” 为按位异或 XOR 运算符。
示例 2:

输入:n = 4, start = 3
输出:8
解释:数组 nums 为 [3, 5, 7, 9],其中 (3 ^ 5 ^ 7 ^ 9) = 8.
示例 3:

输入:n = 1, start = 7
输出:7
示例 4:

输入:n = 10, start = 5
输出:2

提示:

1 <= n <= 1000
0 <= start <= 1000
n == nums.length

解题思路一:暴力很简单。

class Solution:def xorOperation(self, n: int, start: int) -> int:ans = startfor i in range(1, n):# ans ^= start + 2 * ians = ans ^ (start + 2 * i)return ans

时间复杂度:O(n)
空间复杂度:O(1)

解题思路二:优化!时间复杂度:O(1)。注释丰富,明了。

首先要知道:
在这里插入图片描述
解释一下性质五: 0^1^2^3 = 0, 4^5^6^7=0, 8^9^10^11=0 .....以此下去, 有这么个规律存在. 为什么呢? 可以用结合律,把前边两个数和后边两个数分开运算。 然后把数字转换成二进制,4的倍数的部分和最后两位没有关系,4个数字都是相同的, 就比如> 四个数字依次是xxxx00,xxxx01,xxxx10,xxxx11 然后取异或 前两个数的结果就是01,后两个数的异或结果还是01, 01和01异或,结果当然就是0啦
在这里插入图片描述
观察公式可以知道,这些数的奇偶性质相同,因此它们的二进制表示中的最低位或者均为 1,或者均为 0。于是我们可以把参与运算的数的二进制位的最低位提取出来单独处理。当且仅当 start 为奇数,且 n 也为奇数时,结果的二进制位的最低位才为 1。
e = n & start & 1 # 取最低位
在这里插入图片描述
为啥 sumXor() 的逻辑是这样的:
在这里插入图片描述
看代码注释也可以 !

class Solution:def xorOperation(self, n: int, start: int) -> int:# 计算目标 start ^ (start + 2) ^ (start + 4) ^ ... ^ (start + 2(n-1))# 1.提取一个2出来,并且令s = start//2,得到:#           (s ^ (s+1) ^ (s+2) ^ ... ^ (s+n-1)) x 2 + e# 2.这里的e是计算目标的最低位,依据计算目标的特点,e取决于start和n。当且仅当 start 为奇数,且 n 也为奇数时,结果的二进制位的最低位才为 1。#           e = n & start & 1# 3.我们只需要计算:cur = (s ^ (s+1) ^ (s+2) ^ ... ^ (s+n-1))#           依据性质4和性质3:x ^ y ^ y = x 和 (x ^ y) ^ z = x ^ (y + z)#           只需计算:(0 ^ 1 ^ 2 ^ 3 ^ ... ^ s - 1)^( 0 ^ 1 ^ 2 ^ 3 ^ …… ^ s - 1 ^ s ^ (s+1) ^ (s+2) ^ ... ^ (s+n-1))#           便可以得到 (s ^ (s+1) ^ (s+2) ^ ... ^ (s+n-1))# 4. (0 ^ 1 ^ 2 ^ 3 ^ ... ^ s - 1) 的计算函数sumXor(x)的逻辑:#           见函数定义注释以及图解# 5. 最终答案为cur << 1 | e#           等价于(s ^ (s+1) ^ (s+2) ^ ... ^ (s+n-1)) x 2 + edef sumXor(x):if x % 4 == 0: # 刚好剩下nreturn xif x % 4 == 1: # n ^ (n+1) = 1return 1if x % 4 == 2: # n ^ (n+1) ^ (n+2) = 1 ^ (n+2) !!!注意此时x为(n+2)return x + 1if x % 4 == 3: #  n ^ (n+1) ^ (n+2) ^ (n+3) = 0 全部消掉return 0e = n & start & 1 # 取最低位s = start >> 1cur = sumXor(s-1) ^ sumXor(s+n-1)return cur << 1 | e

时间复杂度:O(1)
空间复杂度:O(1)

解题思路三:精简版!

class Solution:def xorOperation(self, n: int, start: int) -> int:def sumXor(x):if x % 4 == 0:return xif x % 4 == 1:return 1if x % 4 == 2:return x + 1if x % 4 == 3:return 0e = start & n & 1s = start // 2ans = sumXor(s-1) ^ sumXor(s+n-1)return ans * 2 + e

时间复杂度:O(n)
空间复杂度:O(n)


创作不易,观众老爷们请留步… 动起可爱的小手,点个赞再走呗 (๑◕ܫ←๑)
欢迎大家关注笔者,你的关注是我持续更博的最大动力


原创文章,转载告知,盗版必究



在这里插入图片描述


在这里插入图片描述
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

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

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

相关文章

ArcGIS如何计算地级市间的距离

一、数据准备 加载配套实验数据包中的地级市和行政区划矢量数据(订阅专栏后,从私信查收数据),如下图所示: 二、计算距离 1. 计算邻近表 ArcGIS提供了计算点和另外点之间距离的工具:分析工具→邻域分析→生成临近表。 计算一个或多个要素类或图层中的要素间距离和其他邻…

与队列和栈相关的【OJ题】

✨✨✨专栏&#xff1a;数据结构 &#x1f9d1;‍&#x1f393;个人主页&#xff1a;SWsunlight 目录 一、用队列实现栈&#xff1a; 1、2个队列的关联起来怎么由先进先出转变为先进后出&#xff1a;&#xff08;核心&#xff09; 2、认识各个函数干嘛用的&#xff1a; …

Android 如何启用user版本的adb源码分析

通过adb shell中执行getprop persist.sys.usb.config&#xff0c;可以看到系统usb的相关选项&#xff0c;persist.sys.usb.config显示的就是当前系统关于usb选项的系统配置【RK3188Android4.4刚移植的例子】: 全编脚本中make命令会调用build/core/main.mk,在里面可以看到一段…

四足机器人摆线规划程序

一、标准摆线公式 { x r ∗ ( θ − sin ⁡ ( θ ) ) y r ∗ ( 1 − cos ⁡ ( θ ) ) \left\{\begin{array}{l} xr *(\theta-\sin (\theta)) \\ yr *(1-\cos (\theta)) \end{array}\right. {xr∗(θ−sin(θ))yr∗(1−cos(θ))​ 这里的r表示摆线的圆的半径&#xff0c; θ \…

nmap使用教程

nmap使用教程 一、nmap简介二、nmap常用命令2.1、target specification&#xff08;目标规范&#xff09;2.1.1、用法2.1.2、详情 2.2、HOST DISCOVERY&#xff08;主机发现&#xff09;2.2.1、用法2.2.2、详情 2.3、SCAN TECHNIQUES&#xff08;扫描技术&#xff09;2.4、PORT…

【全开源】酷柚易汛ERP 源码部署/售后更新/上线维护

一款基于FastAdminThinkPHPLayui开发的ERP管理系统&#xff0c;帮助中小企业实现ERP管理规范化&#xff0c;此系统能为你解决五大方面的经营问题&#xff1a;1.采购管理 2.销售管理 3.仓库管理 4.资金管理 5.生产管理&#xff0c;适用于&#xff1a;服装鞋帽、化妆品、机械机电…

JINGWHALE 量子能量意识进化理论 —— 全息世界

JINGWHALE 对此论文相关未知以及已知概念、定理、公式、图片等内容的感悟、分析、创新、创造等拥有作品著作权。未经 JINGWHALE 授权&#xff0c;禁止转载与商业使用。 人类对于自身的来源充满了好奇心和求知欲望&#xff0c;探索人类起源是人类科学研究和探索的重要领域之一。…

FMEA助力医疗设备研发制造:领跑未来,实现弯道超车!

医疗设备作为保障人类健康的重要工具&#xff0c;其研发与制造水平直接关系到医疗技术的进步。然而&#xff0c;在激烈的市场竞争中&#xff0c;如何能够让自家医疗设备研发制造实现弯道超车&#xff0c;成为行业佼佼者&#xff1f;答案就在于——FMEA&#xff08;失效模式与影…

uniapp 版本检查更新

总体来说uniapp的跨平台还是很不错的&#xff0c;虽然里面各种坑要去踩&#xff0c;但是踩坑也是开发人员的必修课和成长路。 这不&#xff0c;今天就来研究了一下版本检查更新就踩到坑了。。。先来看看检查更新及下载、安装的实现。 先来看看页面&#xff1a; 从左到右依次为…

JAVA排序相关习题7

1.插入排序 1.1 基本思想 直接插入排序是一种简单的插入排序法&#xff0c;其基本思想是&#xff1a; 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列 。 /*** 时间复杂度&…

JAVA 项目<果园之窗>_完结

目录 1、前言&#xff1a;2、视频展示&#xff1a;3、环境配置&#xff1a;4、工程代码&#xff1a;5、原理&#xff1a;6、原理补充&#xff1a;7、综上&#xff1a; 1、前言&#xff1a; 因为没有足够的时间这个项目用的是别人搭好的框架&#xff0c;在此基础上做调整并根据前…

机器学习算法 - 逻辑回归

逻辑回归是一种广泛应用于统计学和机器学习领域的回归分析方法&#xff0c;主要用于处理二分类问题。它的目的是找到一个最佳拟合模型来预测一个事件的发生概率。以下是逻辑回归的一些核心要点&#xff1a; 基本概念 输出&#xff1a;逻辑回归模型的输出是一个介于0和1之间的…