当前位置: 首页 > news >正文

leetcode 面试题17.19 消失的两个数字

一、题目描述

二、解题思路

整体思路

可以采用位运算的思想来解决这个问题。本题的思路是leetcode268丢失的数字与leetcode260只出现一次的数字III的汇总。

具体思路

(1)首先,将[1,n]与nums中的所有数字进行异或,由异或的运算律a^a=0可知,所有成对的数字会被消除,最终的结果为消失的两个数字a^b的结果;

(2)由于a和b不同,所以a^b一定不为0,即a^b一定至少存在一个比特位为1,将a^b的最右边的1分离出来(lowbit);

(3)然后将[1,n]和nums中的所有数依照该比特位是否为1进行分组异或,由于a^b不为0,所以a和b一定会被分开,其他的数字成对会消除,最终的a和b即为两个消失的数字,直接返回即可。

三、代码实现

时间复杂度:T(n)=O(n)

空间复杂度:S(n)=O(1)

class Solution {
public:vector<int> missingTwo(vector<int>& nums) {//求缺失两数的异或值int r=0;for(int i=1;i<=nums.size()+2;i++) r^=i;for(auto x:nums) r^=x;//分离出r最右边的1int tmp=r&(-r);//将[0,n]和nums中的数字进行分组异或int a=0,b=0;for(auto x:nums){if((x&tmp)==0) a^=x;else b^=x;}for(int i=1;i<=nums.size()+2;i++){if((i&tmp)==0) a^=i;else b^=i;}return {a,b};}
};

http://www.dtcms.com/a/360972.html

相关文章:

  • Java学习笔记-反射(二)
  • 无公网IP,怎么实现远程调试与APP端api 接入?
  • 红楼梦 AI HTML 分析 - 好了歌
  • MySQL内置的各种单行函数
  • Kafka消息中间件安装配置
  • Ruoyi项目MyBatis升级MyBatis-Plus指南
  • sentinel异常处理机制
  • 2025机器人产业大洗牌:新兴初创企业的技术革命与崛起之路
  • 【Spring Cloud微服务】8.深度实战:微服务稳定性的守护神——Sentinel
  • Linux下usb设备驱动框架实现:定义核心结构体数据
  • 从Java全栈开发到微服务架构:一次真实的面试实录
  • leetcode算法刷题的第二十三天
  • GitLab 18.3 正式发布,更新多项 DevOps、CI/CD 功能【一】
  • Linux上perf工具的使用-基础采样
  • 云端虚拟云手机该如何进行使用?
  • 高并发场景下的热点数据处理:从预热到多级缓存的性能优化实践
  • 云手机和云游戏之间有着哪些区别?
  • 手机版碰一碰发视频源码搭建,技术实现与实操指南
  • 基于大数据的京东手机销售数据 可视化分析设计与开发03446原创的定制程序,java、PHP、python、C#小程序、文案全套、毕设程序定制、成品等
  • 【音视频】WebRTC QoS 概述
  • 云端虚拟手机:云手机的原理是什么?
  • 【科普向-第七篇】Git全家桶介绍:Git/Gitlab/GitHub/TortoiseGit/Sourcetree
  • 电动两轮车手机导航投屏方案调研报告
  • vscode翻译插件
  • hasOwnProperty是什么
  • Linux部署OSM本地服务测试环境
  • Linux UDisks守护进程曝本地提权漏洞CVE-2025-8067,PoC已发布
  • [Android] 京墨 v1.15.2 —— 古诗词文、汉语字典、黄历等查询阅读学习宝典(可离线)
  • 别再说AppInventor2只能开发安卓了!苹果iOS现已支持!
  • AI-调查研究-66-机器人 机械臂 软件算法体系:轨迹规划·视觉定位·力控策略