优选算法_位运算_只出现一次的数字3_C++

一.题目解析

有一个数组,里面的数都是成双成对的,只有两个是单独的

算法讲解:位运算

我们可以利用消消乐A^A=0来消除相同的数字,只剩下a^b=tmp

再循环进行异或消消乐就可以再AB数组分别得到ab

二.代码编写

cpp 复制代码
class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        int tmp=0;
        for(int num:nums)
        {
            tmp^=num;
        }
        int x=0;
        if(tmp==INT_MIN)
        {
            x=tmp;
        }
        else
        {
            x=tmp&(-tmp);
        }
        
        vector<int>a,b;
        for(auto num:nums)
        {
            if((num&x)!=0)a.push_back(num);//第x位是1的*****
            else b.push_back(num);//第x位是0的
        }
        int num1=0,num2=0;
        for(auto x:a)
        {
            num1^=x;
        }
        for(auto y:b)
        {
            num2^=y;
        }
        return {num1,num2};
    }
};
相关推荐
geats人山人海4 小时前
c# 第九章 record
开发语言·c#
早期的虫儿有鸟吃4 小时前
vue2--Vuex 模块化
开发语言·前端·javascript
浪客川5 小时前
Android的SystemUI的启动流程简析
android·开发语言
郝学胜-神的一滴5 小时前
中级OpenGL教程 022:探秘三维世界的血脉传承——物体父子关系与矩阵递归奥义
c++·线性代数·unity·矩阵·游戏引擎·unreal engine·opengl
-银雾鸢尾-5 小时前
C#中的抽象类与抽象方法
开发语言·c#
拂拉氏5 小时前
【知识讲解】 链式哈希表的实现与unordered_map和unordered_set的封装
数据结构·哈希算法·散列表
haolin123.5 小时前
数据结构--二叉树
数据结构
萧瑟余晖5 小时前
JDK 20 新特性详解
java·开发语言
benchmark_cc5 小时前
如何用 Python 进行多周期 K 线合成与时区对齐?基于 QuantDash 与 Pandas 的量化数据清洗实战(附 GitHub 源码)
开发语言·python·github·盯盘·pandas·quantdash·量化数据
tkevinjd5 小时前
力扣148-排序链表
算法·leetcode·链表