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

【LeetCode刷题】面试题 17.19. 消失的两个数字

  • 1. 题目链接
  • 2. 题目描述
  • 3. 解题方法
  • 4. 代码

1. 题目链接

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

2. 题目描述

img

3. 解题方法

例子假设:

数组A元素为 :1 ,4,5

缺少的元素为:2, 3

那么所有整数就为1 ~ 5,我称这些整数为数组B

此时就有如下的图示:

img

第1步,此时将A、B两个数组的元素都异或起来,所得到的结果就是2 ^ 3,为了后面的讲解

我将2成为a,3称为b。

第2步,找到a和b(异或)比特位上为1的那一位

2 : 0 1 0

3 : 0 1 1

找到的这一位,我在这里叫做第x位

第3步,根据第x位的不同,划分两类进行异或求得结果

根据上面的例子

1 : 0 0 1

5 : 1 0 1

过程 : 3 ^ 1 ^ 1 ^ 5 ^ 5 (相同的两个数字异或直接为0,0异或任何数字为数字本身)

这一类划分到 3 这里进行异或,就得到了唯一的3

4 : 0 1 0

过程 : 2 ^ 4 ^ 4 (相同的两个数字异或直接为0,0异或任何数字为数字本身)

这一类划分到 2 这里进行异或,就得到了唯一的2

4. 代码

class Solution {
public:vector<int> missingTwo(vector<int>& nums) {// 1. 把所有相同的数都异或起来, 获得a ^ bint tmp = 0;for(auto e : nums) tmp ^= e;for(int i = 1; i <= nums.size() + 2; i++) tmp ^= i;// 2. 找到a ^ b 比特位为 1 的那一位int diff = 0;while(1){if((tmp >> diff) & 1 == 1) break;else diff ++;}// 3. 划分两类数字int a = 0, b = 0;for(auto e : nums){if((e >> diff) & 1 == 1) a ^= e;else b ^= e;}for(int i = 1; i <= nums.size() + 2; i++){if((i >> diff) & 1 == 1) a ^= i;else b ^= i;}return {a, b};}
};

最后附上我的打卡记录,希望各位大佬可以监督我。

img

http://www.lryc.cn/news/376855.html

相关文章:

  • 如何定制Spring的错误json信息
  • 【第20章】Vue实战篇之Vue Router(路由)
  • 阿里云运维第一步(监控):开箱即用的监控
  • Python量化交易学习——Part7:定制增强型中证红利策略
  • 拥抱未来:探索改变游戏规则的新存储技术
  • shell中的流程控制
  • DiffIR: Efficient Diffusion Model for Image Restoration
  • xss一些笔记
  • 以太坊网络中为什么要设置Gas上限
  • vue-cli是什么?和 webpack是什么关系?
  • leetcode刷题(46-50)
  • [渗透测试学习] Runner-HackTheBox
  • keil5显示内存和存储占用百分比进度条工具
  • 示例:推荐一个应用Adorner做的消息对话框
  • Building wheels for collected packages: mmcv, mmcv-full 卡住
  • 可视化表单拖拽生成器优势多 助力流程化办公!
  • 数据集制作——语义分割前png、jpg格式标签图转yolo格式.txt文件(附代码)
  • 机器学习课程复习——ANN
  • C++回溯算法(2)
  • 流量有限、日活低的APP适合对接广告变现吗?
  • Shell 学习笔记 - 变量的类型 + 变量的赋值
  • vue播放flv格式的直播流
  • Qt入门小项目 | 实现一个图片查看器
  • qt仿制qq登录界面
  • HashMap详解(含动画演示)
  • TVS的原理及选型
  • 【机器学习】无监督学习:探索数据背后的隐藏模式
  • 使用Elasticsearch在同一索引中区分不同类型的文档
  • 驾校在线考试系统源码 手机+PC+平板自适应
  • c++的多态,继承,抽象类,虚函数表,虚函数等题目+分析