优选算法_位运算_只出现一次的数字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};
    }
};
相关推荐
码爸4 小时前
线性回归算法
算法·机器学习·线性回归
kimnoic5 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
Coder-magician5 小时前
《代码随想录》刷题打卡day51:图论-part09(dijistra堆优化,Bellman_ford算法)
算法·图论
Nil2085 小时前
leetcode 763划分字母区间
算法·leetcode·职场和发展
不会就选b5 小时前
算法日常・每日刷题--<动态规划>20
算法·leetcode·动态规划
别动我齐刘海5 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
程序员老陆5 小时前
C++ std::promise深度解析
c++·程序设计
必须得开心呀6 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python
青少儿编程课堂6 小时前
迪杰斯特拉(Dijkstra)算法:单源最短路与赛场路线规划
c++·python·算法·bfs·信息学竞赛
不会就选b6 小时前
算法日常・每日刷题--<动态规划>19
算法·leetcode·职场和发展