尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

算法日常・每日刷题--<位运算>5

算法日常・每日刷题--<位运算>5
📅 发布时间:2026/6/29 17:44:05

面试题 17.19. 消失的两个数字 - 力扣(LeetCode)面试题 17.19. 消失的两个数字 - 给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗?以任意顺序返回这两个数字均可。示例 1:输入:[1]输出:[2,3]示例 2:输入:[2,3]输出:[1,4]提示: * nums.length <= 30000https://leetcode.cn/problems/missing-two-lcci/description/

一、题目简介

题目描述

给定一个数组nums,原本完整序列是连续整数1,2,3,...,N,现在数组中恰好缺失两个不同数字,数组长度len = N - 2。 要求:在O(N)时间复杂度、O(1)常数额外空间内,找出这两个消失的数字,返回顺序不限。

示例

  1. 输入:[1]数组长度为 1 →N = 1 + 2 = 3,完整序列[1,2,3],缺失[2,3],输出[2,3]
  2. 输入:[2,3]数组长度为 2 →N = 2 + 2 = 4,完整序列[1,2,3,4],缺失[1,4],输出[1,4]

用异或运算

异或基础性质

  1. 交换律、结合律:a ^ b ^ c = a ^ c ^ b;
  2. 相同数字异或抵消:x ^ x = 0;
  3. 任何数异或 0 不变:x ^ 0 = x;
  4. 异或区分二进制位:a ^ b的二进制中,为 1 的位代表 a、b 该位数值不同。

1.用异或运算找出两个没有出现的数字

2.用异或运算将两个数分在两组

用什么方法对其进行分组,由于这两个数是不一样的,必然会有一位是1一位是0

将那一位是1还是0,对所有的数进行分类,再将数进行按组进行异或操作,即可得到答案

class Solution { public: vector<int> missingTwo(vector<int>& nums) { //将所有数字异或在一起得到没有出现的两个数异或在一起的结果 int ret=0; for(auto e:nums) ret=ret^e; for(int i=1;i<=nums.size()+2;i++) ret=ret^i; //找到某一位唯一的位置 int diff=0; while(diff<32) { if(((ret>>diff)&1)==1) break; else diff++; } int a=0,b=0; for(auto e:nums) { if( ((e>>diff) & 1) == 1 ) { a=a^e; } else { b=b^e; } } for(int i=1;i<=nums.size()+2;i++) { if( ((i>>diff) & 1) == 1 ) { a=a^i; } else { b=b^i; } } return {a,b}; } };

相关新闻

  • 告别网络依赖:实战 nf-core 生信流程的完整离线部署与配置
  • 极限竞速地平线4/5全能修改器:Forza Mods AIO 新手完全指南
  • 国内大学生常用的AI论文写作软件是哪款?

最新新闻

  • 开关电源模块全套测试项目总结
  • 好用的水下电机怎么挑?水下电机如何选——基于低压智能路线的工程化观察
  • Memtest86+:终极内存诊断工具,彻底解决电脑蓝屏死机问题
  • Minecraft区块修复工具完全指南:拯救损坏的游戏世界
  • MTK车机开机动画深度定制:从提取、解包到刷入的完整实战
  • 技术升级的路径规划与兼容性处理

日新闻

  • ENVI5.3.1实战:基于Landsat 8影像的区域无缝镶嵌与精准裁剪
  • 3步完成HS2-HF Patch安装:新手快速打造完美HoneySelect2体验
  • 微信好友检测终极指南:3分钟发现谁已悄悄删除你

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号