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

每日一练:位运算-消失的两个数字

面试题 17.19. 消失的两个数字 - 力扣(LeetCode)

题目要求:

给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗?

以任意顺序返回这两个数字均可。

示例 1:

输入: [1]
输出: [2,3]

示例 2:

输入: [2,3]
输出: [1,4]

提示:

  • nums.length <= 30000

按比特位分类 O(N):

        现根据每日一练:位运算-丢失的数字-CSDN博客中的异或解法得到两个数字的异或结果,因为异或是相同为0,相异为1,就可以找到两个数字不一样的某个比特位。

        根据这个比特位可以将nums和[1,n]分为两类:该位置为0的数字和该位置为1的数字,这样做的话两类都只包含1个缺失的数字了。

        每个缺失的数字可以再使用异或解法得到。

class Solution {
public:vector<int> missingTwo(vector<int>& nums) {int n = nums.size() + 2;int two_dig_or = 0;for (const int x : nums)two_dig_or ^= x;for (int i = 1; i <= n; i++)two_dig_or ^= i; // 两数之异或int j = 0; // two_dig_or第一次出现1的位置while (((two_dig_or >> j) & 1) == 0)j++;int a = 0, b = 0;for (int i = 1; i <= n; i++)if ((i >> j) & 1)a ^= i;elseb ^= i;for (const int x : nums)if ((x >> j) & 1)a ^= x;elseb ^= x;return vector<int>({a, b});}
};

http://www.mrgr.cn/news/77834.html

相关文章:

  • LSTM原理解读与实战
  • Nmap识别MongoDB 6.0指纹
  • vue2-代理服务器插槽
  • CSS3_BFC(十二)
  • C:mbedtls库实现https双向认证连接示例_七侠镇莫尛貝大侠20241122
  • NVR接入录像回放平台EasyCVR视频融合平台加油站监控应用场景与实际功能
  • CNN—LeNet:从0开始神经网络学习,实战MNIST和CIFAR10~
  • 第三十四篇 MobileNetV1、V2、V3模型解析
  • 【计算机网络】数据链路层
  • 算法(Algorithm)
  • Playwright(Java版) - 7: Playwright 页面对象模型(POM)
  • 使用 Spring Boot 和 GraalVM 的原生镜像
  • win10局域网加密共享设置
  • 《计算力学学报》
  • MCSA --- make coding simple again
  • JavaFX 实现文件夹和文件选择功能及常见问题解决方案
  • 动态规划子数组系列一>最长湍流子数组
  • 高频面试题(含笔试高频算法整理)基本总结回顾6
  • 【模块一】kubernetes容器编排进阶实战之pod的调度流程,pause容器及init容器
  • Vue.js基础——贼简单易懂!!(响应式 ref 和 reactive、v-on、v-show 和 v-if、v-for、v-bind)
  • Spring学习笔记_41——@RequestBody
  • HarmonyOS4+NEXT星河版入门与项目实战(11)------Button组件
  • 战争迷雾FogOfWar---Unity中实现
  • 解决Electron拖拽窗口点击事件失效问题
  • 「Mac玩转仓颉内测版28」基础篇8 - 元组类型详解
  • 分享一下arr的意义(c基础)(必看)(牢记)