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

(leetcode算法题)面试题 17.19. 消失的两个数字

可以在O(n)的时间复杂度下得到这两个消失的数字的异或的结果,或者得到这两个数字的和

但是怎么从上面的结果中得到这两个数字?

比如对于异或的结果,可以知道这两个数字在哪一位的置位是不同的

然后再根据这一位把 [1,  n] 分为两个不同的数字集合 A 和 B,

也把 nums 分为两种不同的数字集合 C 和 D

然后A ^ C得到 消失的数字①,B ^ D 得到消失的数字②

下面以[1, 14]中消失了两个数字为例

 

代码如下

class Solution {
public:
    vector<int> missingTwo(vector<int>& nums) {
        int XORtotal = 0;
        for (auto& num : nums){
            XORtotal ^= num;
        }

        for (int i = 1; i <= nums.size() + 2; i++){
            XORtotal ^= i;
        }

        int judgeDigit = XORtotal & (-XORtotal);
        int XORtot1 = 0;
        int XORtot2 = 0;
        for (int i = 1; i <= nums.size() + 2; i++){
            if (judgeDigit & i){
                XORtot1 ^= i;
            }
            else{
                XORtot2 ^= i;
            }
        }

        for (auto& num : nums){
            if (judgeDigit & num){
                XORtot1 ^= num;
            }
            else{
                XORtot2 ^= num;
            }
        }
        vector<int> ret = { XORtot1, XORtot2 };
        return ret;
    }
};

 


http://www.kler.cn/a/470062.html

相关文章:

  • 7_TypeScript Number --[深入浅出 TypeScript 测试]
  • 利用 NineData 实现 PostgreSQL 到 Kafka 的高效数据同步
  • 51c自动驾驶~合集45
  • 安徽省乡镇界面图层+arcgis数据shp格式-乡镇名称和编码2020年+wgs84坐标内容测评
  • 产品经理-竞品分析
  • Cyber Security 101-Web Hacking-Burp Suite: The Basics(Burp Suite:基础知识)
  • 01、Redis初认识
  • 哈希表笔记
  • 卡诺图化简最小项表达式
  • leetcode 2274. 不含特殊楼层的最大连续楼层数 中等
  • 后台运行 Python
  • JVM实战—MAT的使用和JVM优化总结
  • pip error: microsoft visual c++ 14.0 or greater is required
  • 文档解析工具:如何将PDF文档转换为Markdown格式?
  • 【FlutterDart】 listView.builder例子二(14 /100)
  • 练习(继承)
  • 25考研|重邮软件工程复试攻略!
  • 数据结构-单链表及其应用
  • 2025课题推荐:低空飞行器在复杂环境中的导航与避障系统
  • 资源分享:gpts、kaggle、paperswithcode
  • excel快速计算周数的方法
  • vue3中ref动态定义
  • 使用Llama 3.1创建合成数据集以调优你的大型语言模型
  • LeetCode代码随想录(二)——977.有序数组平方、209长度最小子数组、59螺旋矩阵2
  • Unity3D仿星露谷物语开发15之创建道具晃动效果
  • Vue——使用html2pdf插件,下载pdf文档到本地