【举一反三】只出现一次的数字

news2024/11/25 0:21:47

 本文,讲位运算——异或运算。因为题干中说明要线性时间复杂度,所以采用位运算进行操作,而没有采用哈希表。


目录

1.只出现一次的数字 I

 2.只出现一次的数字 II

 3.只出现一次的数字 III


1.只出现一次的数字 I

136. 只出现一次的数字 - 力扣(LeetCode)

题目:

给你一个 非空整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间

示例 1 :

输入:nums = [2,2,1]

输出:1

从一个成对数组中找到落单的元素。很显然我们可以使用异或运算。(相同为0,不同为1)

  • 两个相同数字做异或运算,结果为0。可以帮我们排除掉成对的数字。
  • 0和任何数字进行异或运算,都得到这个数字本身。

代码:

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int value=0;
        for(auto e:nums)
        {
            value^=e;
        }
        return value;
    }
};

 2.只出现一次的数字 II

137. 只出现一次的数字 II - 力扣(LeetCode) 

题目:

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法且不使用额外空间来解决此问题。

示例 1:

输入:nums = [2,2,3,2]

输出:

        本题,如果我们继续简单的使用异或,我们会发现最后结果是2^3,没办法得到正确答案。我们可以换个思路题中强调每个元素恰好出现三次,我们从次数的角度出发,考虑该位值为1的次数取模。

        数的每一位只有0或1。首先我们考虑第一位,再依次类推直到第32位结束,答案元素的每一位为0或者为1我们都是已知,即得到该答案元素。

如果非答案元素第一位为0,则有:

  • 答案元素第一位为0,总共0个1,0%3=0
  • 答案元素第一位为1,总共1个1,1%3=1

如果非答案元素第一位为1,则有:

  • 答案元素第一位为0,总共3个1,3%3=0
  • 答案元素第一位为1,总共4个1,4%3=1

例子: 

代码: 

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int res=0;
        for(int i=0;i<32;i++)
        {
            int sum=0;    //统计值为1的次数
            for(auto& e:nums)
            {
                sum+=((e>>i)&1);
            }
            if((sum%3)==1)
            {
                res|=(1<<i);    //与0移位或运算
            }
        }
        return res;
    }
};

时间复杂度:O(n logC),其中n是数组长度,C是数据范围,本题int数据类型,logC=32。

空间复杂度:O(1)

 3.只出现一次的数字 III

260. 只出现一次的数字 III - 力扣(LeetCode)

题目:

给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。

你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。

示例 1: 

输入:nums = [1,2,1,3,2,5]

输出:[3,5]

解释:[5, 3] 也是有效的答案。

        本题,还是在异或运算的基础上进行拓展,我们观察题目可以发现,这道题目对所有元素异或后的结果也是2个不同的元素进行异或,而其他元素频数都是2如题目I一样消除了。

        也就是说我们可以直接从异或的结果得到启发,某位值为1,就表明两个答案在该位的值不同。我们可以从这个角度为出发点进行切入,对数组分组!两个答案一定在不同的组中。

思路:

已知x^x==0。定义数组的异或和为该数组所有元素的异或。

  • 求出nums的异或和xor,可知xor为两个目标元素的异或。
  • 找到xor中为1的二进制位,假设是第k位。这说明两个目标元素在第k位上不相同。
  • 根据第k位是0还是1,把nums分为两组,这样两个目标元素一定位于不同的组。
  • 分别求出两组的异或和,即得到两个目标元素。

例子: 

 代码:

class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        vector<int>ans(2);
        int value=0;
        for(auto& e:nums)
        {
            value^=e;
        }
        int k=0;
        while((value&1)==0)
        {
            value>>=1;
            ++k;
        }
        int ans1=0,ans2=0;
        for(auto&e:nums)
        {
            if(((e>>k)&1)==0)
            {
                ans1^=e;
            }
            else
            {
                ans2^=e;
            }
        }
        ans[0]=ans1;
        ans[1]=ans2;
        return ans;
    }
};

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/429757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅析Dubbo核心设计

大家好&#xff0c;我是易安&#xff01; 当今互联网时代&#xff0c;随着企业业务的不断扩展和用户量的增加&#xff0c;分布式系统已成为大型企业必不可少的组成部分。而Dubbo框架作为阿里巴巴开源的高性能Java RPC框架&#xff0c;一直以来都备受关注和使用。其核心设计思想…

机器学习正以惊人的速度破解宇宙奥秘

宇航员、科学家和其他以探索并记录终极边界为己任的人们&#xff0c;才积极转向机器学习&#xff08;ML&#xff09;以协助应对自己面临的非凡挑战。从引导火箭穿越太空到研究遥远行星的表面&#xff0c;再到测量宇宙大小和计算天体的运动轨迹&#xff0c;AI在太空中拥有着众多…

300左右蓝牙耳机推荐,口碑好的平价蓝牙耳机选购指南

300元预算&#xff0c;想入手一款最值得蓝牙耳机&#xff0c;咋选&#xff1f;作为一个有4年玩机经验的爱好者&#xff0c;蓝牙耳机推荐性价比高的产品&#xff0c;今天就总结了几款目前很受欢迎&#xff0c;同时性能各方面都不错的机型&#xff0c;选对这几款&#xff0c;不用…

WIN10、WIN11 新电脑配置

WIN10、WIN11 新电脑配置WIN10、WIN11 新电脑配置开启管理员模式启用power shell脚本WIN10、WIN11 新电脑配置 开启管理员模式 WIN11 下没有安装本地安全策略组件&#xff0c;表现为CMD运行 secpol.msc 命令会提示异常 开启本地安全策略 echo off pushd "%~dp0"…

电脑上怎么把PDF转换成PPT?几步教你轻松转换

PDF文件是一种常见的办公文档格式&#xff0c;它具有固定格式和内容不易改变的特点&#xff0c;广泛应用于各种正式场合。虽然各种办公软件都能够将文件转换为PDF格式&#xff0c;但如果需要将PDF文件转换为其他格式&#xff0c;就需要使用专门的工具了。今天我们将介绍两款常用…

论文解读 | 解耦知识蒸馏

10 年来&#xff0c;DNN 的变革给计算机视觉领域带来了重大发展&#xff0c;促成了各种实时任务的繁荣&#xff0c;如图像分类、目标检测、语义分割等。然而强大的网络通常得益于大的网络容量&#xff0c;这通常以大量的计算和存储为代价&#xff0c;是工业应用所不喜欢的。在工…

一觉醒后ChatGPT 被淘汰了

OpenAI 的 Andrej Karpathy 都大力宣传&#xff0c;认为 AutoGPT 是 prompt 工程的下一个前沿。 近日&#xff0c;AI 界貌似出现了一种新的趋势&#xff1a;自主人工智能。 这不是空穴来风&#xff0c;最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉前 AI 总监、刚刚回归…

X进制转十进制黄金万能算法

单纯、混合进制通吃&#xff0c;真正的黄金万能的进制转换方法。 【学习的细节是欢悦的历程】Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简单…… 地址&#xff1a;https://…

LINUX_kali学习笔记

基础命令 命令说明示例pwd查看当前路径ls查看当前文件夹下文件 .开头为隐藏文件 &#xff08;文件夹下使用ctrlh查看&#xff09;ls -a&#xff08;查看文件及隐藏文件&#xff09;ls -alh&#xff08;查看文件及显示详情&#xff09;cd切换目录cd /&#xff08;切换到根目录&…

为何MySQL 8.0开始取消了查询缓存

官方文档说明&#xff1a;MySQL :: MySQL 8.0: Retiring Support for the Query Cache MySQL查询缓存是查询结果缓存。它将以SEL开头的查询与哈希表进行比较&#xff0c;如果匹配&#xff0c;则返回上一次查询的结果。 进行匹配时&#xff0c;查询必须逐字节匹配&#xff0c;例…

[Netty源码] 服务端启动过程 (二)

文章目录1.ServerBootstrap2.服务端启动过程3.具体步骤分析3.1 创建服务端Channel3.2 初始化服务端Channel3.3 注册selector3.4 端口绑定3.5 服务端的读事件1.ServerBootstrap ServerBootstrap引导服务端启动流程: //主EventLoopGroup NioEventLoopGroup master new NioEvent…

深入浅出:理解 RPC 和 Dubbo 架构

简介 Apache Dubbo是一款高性能的Java RPC框架.其前身是阿里巴巴公司开源的一个高性能,轻量级的开源Java RPC框架,可以和Spring框架无缝集成. Dubbo 官网 RPC RPC介绍 Remote Procedure Call 远程过程调用,是分布式架构的核心,按响应方式分以下两种: 同步调用:客户端调用…

App/Web自动化的面试题

App/Web自动化的面试题&#xff08;详细答案自己百度哈,红色的表示app自动化专有问题、绿色表示web自动化专有的问题&#xff0c;未标色的表示共有的问题&#xff09; 备注&#xff1a;一般面试的时候是结合简历上的项目一步一步深入进行问的问题&#xff0c;只要你实际做过一个…

HPE: smart storage: hpssacli:

文章目录参考命令实例问题参考 https://cmdref.net/hardware/proliant/hpssacli.html https://support.hpe.com/connect/s/softwaredetails?languageen_US&softwareIdMTX_9849e3ae326f43f2825d92dce0 https://community.hpe.com/hpeb/attachments/hpeb/itrc-264/148204/3…

SpringBoot—JPA和Mybatis多数据源配置和使用

JPA多数据源配置 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apa…

VM 增加硬盘

1、使用“fdisk -l”的命令查看当前系统的分区&#xff08;如果刚才设置VMware--“设置”的时候运行了系统&#xff0c;则会出现下图情况&#xff1a;没有识别到新的磁盘即sdb&#xff09;&#xff0c;解决办法&#xff0c;重启虚拟机&#xff1a;shutdown -r now 2、 输入 # …

【Python_Selenium学习笔记(八)】基于Selenium模块实现滑块验证码破解

基于Selenium模块实现滑块验证码破解 前言 有些网站页面会在 访问时进行滑块验证&#xff0c;针对此问题&#xff0c;此篇文章中会介绍如何基于 Selenium 模块实现滑块验证码的破解 &#xff0c;并以模拟登录豆瓣网&#xff0c;破解其滑块验证码 为例进行讲解。 正文 1、滑…

需要买apple pencil吗?ipad第三方电容笔了解下

第一款ipad早在诞生于十年前&#xff0c;并被作为一款平板电脑使用&#xff0c;其性能十分出色。随着IPAD的不断更新换代&#xff0c;IPAD已经被越来越多的人接受了。其中&#xff0c;iPad的附属配件起到了很大的作用&#xff0c;就像今天要介绍的电容笔&#xff0c;它是我们进…

Python接外包养无敌可爱的她,每天都随便花~

人生苦短&#xff0c;我用python 女友好不容易放假&#xff0c;她带着我花花花的样子真的很迷人~ python 安装包资料:点击此处跳转文末名片获取 不为什么 我的女友我来宠&#xff01; 作为一个程序员&#xff0c;要有会用自己的技术创造价值的自觉~ 今天来给大家展示一下用py…

第七章 法律行为与法律意识

目录 第一节 法律行为 一、 法律行为的含义与特征二、 法律行为的结构 &#xff08;一&#xff09;法律行为的内在方面 动机目的认知能力 &#xff08;二&#xff09;法律行为的外在方面 行动&#xff08;行为&#xff09;手段结果 三、法律行为的分类 第二节 法律意识 一、法…