力扣-题号2997

news/2024/9/29 15:26:40

2997. 使数组异或和等于 K 的最少操作次数

3a3f178ecf1577bb12e58e260d2bd139

题目

给你一个下标从 0 开始的整数数组 nums 和一个正整数 k

你可以对数组执行以下操作 任意次

  • 选择数组里的 任意 一个元素,并将它的 二进制 表示 翻转 一个数位,翻转数位表示将 0 变成 1 或者将 1 变成 0

你的目标是让数组里 所有 元素的按位异或和得到 k ,请你返回达成这一目标的 最少 操作次数。

注意,你也可以将一个数的前导 0 翻转。比方说,数字 (101)2 翻转第四个数位,得到 (1101)2

示例一

输入:nums = [2,1,3,4], k = 1
输出:2
解释:我们可以执行以下操作:
- 选择下标为 2 的元素,也就是 3 == (011)2 ,我们翻转第一个数位得到 (010)2 == 2 。数组变为 [2,1,2,4] 。
- 选择下标为 0 的元素,也就是 2 == (010)2 ,我们翻转第三个数位得到 (110)2 == 6 。数组变为 [6,1,2,4] 。
最终数组的所有元素异或和为 (6 XOR 1 XOR 2 XOR 4) == 1 == k 。
无法用少于 2 次操作得到异或和等于 k 。

示例二

输入:nums = [2,0,2,0], k = 0
输出:0
解释:数组所有元素的异或和为 (2 XOR 0 XOR 2 XOR 0) == 0 == k 。所以不需要进行任何操作。

提示

  • 1 <= nums.length <= 105
  • 0 <= nums[i] <= 106
  • 0 <= k <= 106

题解

分析

题目里提到了两个关键词:

  • 按位异或
  • 二进制

按位异或:同则为0,异则为1,任何数和0异或都等与它本身

例如: 2 XOR 3 = 13(十进制) =  ...0011(二进制)    int 类型前面还有28个02(十进制) =  ...0010(二进制)    int 类型前面还有28个01(十进制) =  ...0001(二进制)    int 类型前面还有28个0

二进制:位运算,左移<<,右移>>,不足补零,每移动一位相当于十进制数除以2

题目里要求最终数组里所有数按位异或后的值等于指定值,那么最终数组的所有值再加上指定值一起异或是不是应该等于0,毕竟相同数异或后等于0

那么问题是不是变成了如何使所有数异或并调整后(翻转)后等于0,想到这问题就简单了,我们只需把所有数异或后得到的数的二进制形式中的1全部翻转成0就行了,那么所需的步骤也就是其中1的个数

AC代码(C语言)

分析完毕,不多哔哔,上代码

int minOperations(int* nums, int numsSize, int k) {int count = 0;//统计1的个数for(int i = 0; i < numsSize; i++) {k = k ^ nums[i];//将所有值与K异或}while(k != 0) {//把异或结果不断右移,统计其中1的个数if(k & 1) {//&按位与运算,同时为1则结果为1,其他为0,例:010&001=000=0(十进制), 111&001=001=1count++;}k >>= 1;}return count;
}

image-20240511003102059

结束语

这题看上去挺唬人的,想通了,其实也没什么,也就那几行代码

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

现代移动端网络短连接的优化手段总结:请求速度、弱网适应、安全保障

1、前言 众所周之,通常开发一个移动端应用,会直接调用系统提供的网络请求接口去服务端请求数据,再针对返回的数据进行一些处理。 但对于追求用户体验的应用来说,还会针对移动网络的特性做进一步优化,包括: 1)速度优化:网络请求的速度怎样能进一步提升? 2)弱网适应:移…

25-有参转录组实战11-上传转录组到NCBI

上传转录组到NCBI登录NCBI>点击submit>选SRA>选Project>点New submission 1 SUBMITTER 填写名字,邮件,no group,学校学院,街道邮编国家,continue 2 GENERAL INFO 填no BioProject, no BioSample,立马释放数据。 3 PROJECT INFO 填个title和description,no…

手机H5页面在IOS系统中无法获取Geolocation

需求 在开发H5页面的时候希望获取用户的地理位置信息,这里演示在用户上传图片的时候将用户的地理位置信息作为水印显示。 问题 在安卓手机使用vant-upload组件是没问题的,但是在IOS手机上有,报下面的提示信息。原因 苹果的IOS做了限制,如果需要使用IOS的服务,必须是HTTS协…

项目冲刺day3

这个作业属于哪个课程 软工4班这个作业要求在哪里 作业要求1.会议1. 照片 时间冲突,采用微信聊天方式2. 昨日已完成: 完成登录、注册功能,部分完成用户中心功能3.今天计划完成的工作 用户中心功能、订单管理功能4.工作中遇到的困难 沟通和信息共享并不总是顺利。这导致了一些…

MySQL面试必备二之binlog日志

本文首发于公众号:Hunter后端 原文链接:MySQL面试必备二之binlog日志关于 binlog,常被问到几个面试问题如下:binlog 是什么 binlog 都记录什么数据 binlog 都有哪些类型,都有什么特点 如何使用 binlog 恢复数据 binlog 都有哪些作用 binlog 属于逻辑日志还是物理日志基于上…

开源RAG框架汇总

前言 本文搜集了一些开源的基于LLM的RAG(Retrieval-Augmented Generation)框架,旨在吸纳业界最新的RAG应用方法与思路。如有错误或者意见可以提出,同时也欢迎大家把自己常用而这里未列出的框架贡献出来,感谢~ RAG应用框架RAGFlow项目地址:https://github.com/infiniflow/…

kali中arp欺骗,连上校园网断舍友的网

首先kali的配置: 参考网站:https://jingyan.baidu.com/article/2c8c281d145cf44108252a97.html 然后下载arpspoof插件: apt-get install dsniff然后一条命令: arpspoof -i eth0 -t 受害者的ip 网关//这个网关是你自己连上校园网的那个网关

Scrum冲刺4--5.10

Scrum冲刺4--5.10这个作业属于哪个课程 软件工程这个作业要求在哪里 团队项目这个作业的目标 进行敏捷冲刺,熟悉团队合作开发前端仓库 前端后端仓库 后端每次冲刺日志索引时间 博客5.7 Day1ᕙ(`▿)ᕗ5.8 Day2ᕙ(• ॒ ູ•)ᕘ5.9 Day3(˚ ˃̣̣̥᷄⌓˂̣̣̥᷅ )5.10 Day4 (…