只出现一次的数字(位运算算法)

目录

一:题目链接

二:题目思路

三:代码实现


一:题目链接

二:题目思路

首先,我们可以通过将数组的元素一直 按位异或(^) 操作,就可以得到那两个只出现一次数字的 按位异或(^) 后的值 ret 。

之后,我们就要将这两个数字分离开来,怎么做呢?因为 ret & ( - ret) 得到 ret 二进制最低位出现的数字 1,再因为两个数字 按位异或 后不同的二进制位是 1,以这个为突破点,我们就可以继续操作。先看代码实现再解释后面:

三:代码实现

java 复制代码
        int ret = 0;
        for(int x : nums) {
            ret ^= x;
        }

        int k = ret & (-ret);

        int a = 0;
        int b = 0;
        for(int x : nums) {
            if((x & k) != 0) {
                a ^= x;
            }else {
                b ^= x;
            }
        } 
        return new int[]{a,b};

再定义 两个变量 a, b,再遍历一遍数组,因为数组其他元素都会出现两次。所以其中相同的元素会两次进入 a ^= x 或两次进入 b ^= x ,无影响。再结合上面所说的两个数字 按位异或 后不同的二进制位是 1,以这个为突破点分离两个只出现一次的数字。

相关推荐
꧁细听勿语情꧂11 分钟前
二叉树余题,排序、直接插入排序、希尔排序
c语言·开发语言·数据结构·算法
是main不是漫34 分钟前
【双指针|LeetCode1089 复写零】巧用逆向思路,破解原地覆盖陷阱
数据结构·算法·leetcode
apcipot_rain4 小时前
C++转Java日记(06)
java·开发语言
金銀銅鐵9 小时前
带您看懂字节码指令(一):一帧里有什么
java·后端·ai编程
专注仿真10 小时前
知识问答模型用到的算法集详解及代码实例
python·算法·代码·大模型训练·控制算法
nice_lcj52011 小时前
【从零理解 Spring AI · 14】RAG 的四个环节:加载、切分、向量化、检索
java·spring boot·embedding·向量数据库·rag·spring ai·ai应用开发
罗西的思考11 小时前
【轻量化复刻大模型 / KIMI K3】AttnRes 模块交互式演示
人工智能·算法·机器学习
学长毕设12 小时前
基于springboot科创竞赛信息平台-附源码
java·spring boot·后端
聪明的笨猪猪13 小时前
Java 工程案例:AI 生成 @Async 异步线程池踩坑
java·经验分享·面试·ai编程
学长毕设13 小时前
基于SpringBoot公务员考试交流平台-附源码
java·spring boot·后端