面试题 17.19. 消失的两个数字

知识浅谈 🐄🐄🐄🐄🐄大佬
后端领域优质创作者
博客专家认证
2022-09-26 10:46:59

题意

给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗?

以任意顺序返回这两个数字均可。
示例 1:

输入: [1]
输出: [2,3]
示例 2:

输入: [2,3]
输出: [1,4]
提示:

nums.length <= 30000

题解

class Solution {
    public int[] missingTwo(int[] nums) {
        int index=0;
        int []rec = new int[2];
        int len = nums.length;
        int c = 0;
        for(int num:nums) c^=num;
        for(int i=0;i<=len+2;i++) c^=i;

        int lowBit = c&(-c); //因为要求的是两个不存在的数的异或
        int a =0;
        for(int num:nums) if((num&lowBit)!=0) a^=num;
        for(int i=0;i<=len+2;i++) if((i&lowBit)!=0) a^=i;
        rec[0]=a;
        rec[1]=a^c;
        return rec;
    }
}

img

...全文
238 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-编程语言 发布问题, 以便更快地解决您的疑问

17,226

社区成员

发帖
与我相关
我的任务
社区描述
知识浅谈(万道面试题)社区,旨在为找工作的小伙伴提供技术内容共享学习平台,助力每位小伙伴找到好工作,欢迎各位小伙伴的加入。
jvm小程序java 个人社区 吉林省·长春市
社区管理员
  • 知识浅谈
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

【社区倡导与禁止】

  • 社区倡导积极发帖,互相交流技术问题,学习心得。
  • 社区不限制技术领域,后端内容增加加精权重
  • 社区禁止发布低俗、不健康的内容

【社区积分规则】

  • 在社区「发帖」得10积分
  • 内容被管理员「加精」得10积分
  • 点赞他人内容得1积分
  • 评论内容得2积分

试试用AI创作助手写篇文章吧