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

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

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

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

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

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

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

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

代码如下

cpp 复制代码
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;
    }
};
相关推荐
穿条秋裤到处跑几秒前
每日一道leetcode(2026.04.24):距离原点最远的点
算法·leetcode·职场和发展
wayz115 分钟前
Day 13 编程实战:朴素贝叶斯与极端涨跌预警
人工智能·算法·机器学习
踩坑记录8 分钟前
121. 买卖股票的最佳时机 easy 贪心算法
leetcode
叶小鸡30 分钟前
小鸡玩算法-力扣HOT100-贪心算法
算法·leetcode·贪心算法
Old Uncle Tom38 分钟前
提示词编写规范
数据库·算法
火山口车神丶40 分钟前
如何借助AI进行模块封装DIY
javascript·人工智能·算法
MegaDataFlowers1 小时前
15.三数之和
算法
贾斯汀玛尔斯1 小时前
每天学一个算法--一致性哈希(Consistent Hashing)
算法·哈希算法
无限进步_2 小时前
C++ 继承机制完全解析:从基础原理到菱形继承问题
java·开发语言·数据结构·c++·vscode·后端·算法
superior tigre2 小时前
45 跳跃游戏2
算法·leetcode·游戏