LeetCode题解—260.只出现一次的数字Ⅲ

2023-11-20

题目地址:260. 只出现一次的数字 III - 力扣(LeetCode)

 

题解:

这道题是基于寻找只出现一次的数字Ⅰ上的拓展。136. 只出现一次的数字 - 力扣(LeetCode)

 在Ⅰ中,我们只需要把所有的数字异或一遍即可,因为只有一个数字是唯一的。

但是,这道升级题中有两个单独的数字,只是异或遍历一遍的话就相当于让这两个数字异或。

这样是不能找到这两个数字的。因此我们的重点就是在异或之后,怎样才能把他俩分开。

首先,我们要清楚异或的“本质”。

异或两个数字,实际上就是二进制里它俩哪一位不同就是1,哪一位相同就是0。

而这,就是分离这两个数字的关键。

因为是两个不同的数字,所以注定它们至少有一位是不同的,该位的数值是1。

那么好了,我们可以把数组全部遍历一遍。这一位上是1的放一组,是0的放一组。

这样分组后,就决定了这两个数字肯定分在了两组。

于是,问题就回到了最初的情况,一组里只有一个数字是单独的,其他都是两个。

那么只需要把这两组再分别异或一遍即可。

这里我们可以举个例子:

4 6 4 5 2 6 3 3

第一步,全部异或,得到二进制表示为(因为数据不大,以下均展示4位)

5 ^ 2 = 0011

第二步,取任意一位为1的位数,这里我们选第一位。0011

第三步,将原数组按第一位分开,得到:

第一位为1 5 3 3
第一位为0 4 6 4 2 6

第四步,分别异或,得到答案。

代码

class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        //全部异或
        int num = 0;
        for(auto x : nums)
        {
             num ^= x;
        }

        //寻找第一个位数为1的位
        int pos = 0;
        for(pos = 0; pos < 32; pos++)
            if(num >> pos & 1) break;

        //将原数组依据该位遍历分开
        int left = 0, right = 0;
        for(auto x : nums)
        {
            if(x >> pos & 1) left ^= x;//该位为1
            else right ^= x;//该位为0
        }
        return {left, right};
    }
};

效率

当然,哈希也是一种解法,但哈希的空间复杂度太高,是O(N)。

而该方法的空间复杂度是O(1)

同时,时间复杂度是O(N)

不要降低预期去屈就性能,而要提升性能满足预期。——拉尔夫•马斯顿


如有错误,敬请斧正

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode题解—260.只出现一次的数字Ⅲ 的相关文章

  • 面试经典算法-回文数判断,最长回文子串

    01 回文数 Leetcode 09 回文数 判断一个整数是否是回文数 回文数是指正序 从左向右 和倒序 从右向左 读都是一样的整数 比如20200202就是一个回文数 判断回文数有三种解法 1 一般解法 将整数转为字符串 然后将字符串分割
  • 如何理解电容的阻抗-频率曲线

    B站视频讲解 https www bilibili com video BV1vz4y197kP p 3 今天我们来说一说电容的阻抗频率曲线 首先呢 为什么要讲这个呢 那是因为这个非常重要 对我们使用电容有很大的指导意义 电容阻抗 频率曲线

随机推荐

  • 程序员必知的23种设计模式之组合模式

    文章目录 1 模式引出 学校院系展示需求 1 1 传统方案 1 2 传统方案问题分析 2 组合模式基本介绍 2 1 方案修改 3 组合模式解决的问题 4 组合模式的注意事项和细节 1 模式引出 学校院系展示需求 编写程序展示一个学校院系结构
  • 苹果数据恢复软件:Omni Recover Mac

    Omni Recover是一款十分实用的Mac数据恢复软件 为用户提供了简单 安全 快速和高效的数据恢复服务 如果您遇到了Mac或iOS设备中的数据丢失和误删情况 不要着急 不妨尝试一下Omni Recover 相信它一定会给您带来惊喜 首
  • LeetCode题目笔记——17.19消失的两个数字

    文章目录 题目描述 题目难度 困难 方法一 暴力 代码 代码优化 方法二 数学方法 代码 总结 题目描述 题目直达 题目难度 困难 方法一 暴力 虽然题目说你能在 O N 时间内只用 O 1 的空间找到它们吗 但是也没有限制我们不能用暴力
  • 深度学习之学习路线

    本文知识来源参考网络与专业书籍 文章目录 一 先简单认识什么是深度学习 二 深度学习之学习路线推荐 1 学习基础 2 学习书籍与视频推荐 一 先简单认识什么是深度学习 直接看图 深度学习是属于人工智能 再细分下来就是深度学习是一种比较火的机
  • Scala安装教程

    1 Scala官网滑到最下面如图 选择Allversions 2 我们将下载2 12 16版本 如图下 3 选scala 2 12 16 zip安装 4 先将scala 2 12 16zip解压为文件夹我解压到了D盘的scalal文件夹下面
  • 计算机网络物理层概述

    物理层 一 物理层基本概念 用于物理层协议常被称为物理层规程 物理层有四个特性 1 机械特性 指明接口所用接线器的形状和尺寸 引脚数目和排列 固定和锁定装置等 平时常见的各种规格的插件都有严格的标准化规定 2 电器特性 指明在接口电缆的各条
  • OpenSSL生成密钥对

    OpenSSL工具安装 Linux用户 以Ubuntu为例 sudo apt get install openssl Windows用户 开发者可以在OpenSSL官方网站下载Windows的 OpenSSL安装包 进行安装 RSA私钥及公
  • 泰勒公式的介绍、应用及常见题型

    目录 一 简介 1 泰勒公式及其证明过程 2 两种类型的余项 3 麦克劳林公式 二 泰勒公式常见题型 1 用泰勒公式展开函数 2 用泰勒公式求极限 3 用泰勒公式讨论无穷小的比较 4 用泰勒公式证明等式和不等式 一 简介 1 泰勒公式及其证
  • JAVA实现简易HTTP服务器

    说实话 之前完全没有想过 我还能写出服务器 感觉服务器这么高端的东西 能会用就不错了 还能写 不吐槽了 开始了 这次的作业是搭建一个服务器 要能接收请求 并给浏览器返回正确响应 项目的下载地址 项目目标 实现一个简易的多线程服务器 可以处理
  • Linux 内核中的 Device Mapper 机制

    Linux 内核中的 Device Mapper 机制 尹 洋 在读博士生 尹洋 中科院计算所国家高性能计算机工程技术研究中心的在读博士生 主要从事服务部署和存储资源管理以及Linux块设备一级的开发和研究工作 简介 本文结合具体代码对 L
  • macOS命令行终端隐藏主机名和用户名

    首先要区分自己的终端用的是Bash Shell还是Zsh Shell 网上很多教程都是Bash的 所以如果你用的是Zsh 那按照Bash的步骤来设置是不会有效果的 从2019年起 macOS的默认Shell由Bash改为Zsh 查看当前使用
  • 手把手教你安装Eclipse最新版本的详细教程 (非常详细,非常实用)

    简介 首先声明此篇文章主要是针对测试菜鸟或者刚刚入门的小伙们或者童鞋们 大佬就没有必要往下看了 写这篇文章的由来是因为后边要用这个工具 但是由于某些原因有部分小伙伴和童鞋们可能不会安装此工具 为了方便小伙伴们和童鞋们的后续学习和不打击他们的
  • GET报错注入(Sqli-labs第一题详解)

    文章目录 一 找注入点 二 order by判断列数 三 union联合注入 判断数据显示点 四 爆库 爆表 一 找注入点 单引号注入题目 在参数后面加一个单引号 id 1 数据库报错 单引号匹配出错 即添加的单引号成功被数据库解析 可以通
  • es文件浏览器怎么开ftp服务器,es文件浏览器怎么开ftp服务器

    es文件浏览器怎么开ftp服务器 内容精选 换一换 怎样上传文件到Windows操作系统云服务器 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具 将文件上传到云服务器 例如QQ exe 在本地主机和Windows云服务
  • qt在打包的时候提示应用程序无法正常启动(0xc000007b)

    造成这种现象的原因是你的电脑中有多个版本的qt 导致环境路径会出现有问题 解决的方法是 1 找到你配置好的开发程序使用的QT版本 进入Qt命令行工具 使用windeployqt命令来进行打包
  • Mac 安装 vue 环境

    安装 nodejs 首先 安装 nodejs 官网下载node https nodejs org zh cn 接下来 安装下载下来的软件包 安装完成后 在终端输入 node v 查看是否安装成功 安装 cnpm 终端输入 sudo npm
  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • Linux下面安装MySQL详细步骤讲解

    今天下午在Linux下装了MySQL 我的是虚拟机里面装的CentOs7版本 装mysql的过程中遇到了一些问题 网上的回答又是乱七八糟 为了使朋友们少走弯路 特把我今天安装的全部流程总结如下 1 首先我是先从官网下下载一个 mysql 5
  • 在centos在部署分布式文件存储系统Minio

    docker部署以及详细文档自取 链接 https pan baidu com s 14NhCk1SQZEHqzMubpUD0eQ 提取码 xyxy 0 应用场景 电商网站 海量商品图片 视频网站 海量视频文件 网盘 海量文件 社交网站 海
  • LeetCode题解—260.只出现一次的数字Ⅲ

    题目地址 260 只出现一次的数字 III 力扣 LeetCode 题解 这道题是基于寻找只出现一次的数字 上的拓展 136 只出现一次的数字 力扣 LeetCode 在 中 我们只需要把所有的数字异或一遍即可 因为只有一个数字是唯一的 但