首页 > 其他分享 >LeetCode热题100(136.只出现一次数字)

LeetCode热题100(136.只出现一次数字)

时间:2024-06-23 23:02:49浏览次数:25  
标签:数字 temp nums int 异或 136 100 热题 运算

一.只出现一次数字

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

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

示例 1 :
输入:nums = [2,2,1]
输出:1

示例 2 :
输入:nums = [4,1,2,1,2]
输出:4

示例 3 :
输入:nums = [1]
输出:1

提示:
1 <= nums.length <= 3 * 104
-3 * 104 <= nums[i] <= 3 * 104
除了某个元素只出现一次以外,其余每个元素均出现两次。

解题思路:

其实这道题可以有多种解法.
我们可以暴力遍历,统计所有数字出现的次数,最后回过头来再遍历找到只出现一次那个数字.
但是这种方法性能太低,时间复杂度为O(n),并且我们需要建立数组或者Map集合来统计次数,不符合题目的限制.

我们注意到这道题,其他数字出现都是两次,所以我们应该换一种思路.
大家应该都了解位运算中的异或运算,我们来仔细研究一下他的特性.
我们先来复习一下什么是异或运算.
例如:
数字 8 转化为二进制为 0000 1000
数字 10 转化为二进制为 0000 1010
异或运算就是对位不同置为1,对位相同置为0.
例如8^10的结果就是 0000 0010,转化为10机制就是2.
还有一种特性,0对任意数字异或都等于这个数字.
那我们借助这种运算特性,如果数字相同的异或,那会有什么结果呢?
是不是结果会是0,因为数字相同代表每一位都相同,所以异或以后就是0.
回过头再来看这个题,我们不就可以利用这个特性完成这个题目结果了吗,相同的都为0,数组中所有的数字进行异或运算那么余下来的最后那一个就是我们找到只出现一次的数字 .

代码如下

class Solution {
    public int singleNumber(int[] nums) {
        if(nums.length == 1) return nums[0];
        int temp = nums[0];
        for(int i = 1;i<nums.length;i++){
            temp = nums[i] ^ temp;
        }
        return temp;
    }
}

标签:数字,temp,nums,int,异或,136,100,热题,运算
From: https://blog.csdn.net/m0_65013257/article/details/139881637

相关文章

  • Day 30 | 122.买卖股票的最佳时机II、55. 跳跃游戏 、45.跳跃游戏II、 1005.K次取反后
    122.买卖股票的最佳时机II本题解法很巧妙,本题大家可以先自己思考一下然后再看题解,会有惊喜!https://programmercarl.com/0122.买卖股票的最佳时机II.html给定一个数组,它的第i个元素是一支给定股票第i天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成......
  • 【数学】100332. 包含所有 1 的最小矩形面积 II
    本文涉及知识点数学LeetCode100332.包含所有1的最小矩形面积II给你一个二维二进制数组grid。你需要找到3个不重叠、面积非零、边在水平方向和竖直方向上的矩形,并且满足grid中所有的1都在这些矩形的内部。返回这些矩形面积之和的最小可能值。注意,这些......
  • C++题解(1) 信息学奥赛一本通 1003:对齐输出 洛谷 B2004:对齐输出 土豆编程 T1003:对
    【题目描述】读入三个整数,按每个整数占8个字符的宽度,右对齐输出它们,按照格式要求依次输出三个整数,之间以一个空格分开。【输入】只有一行,包含三个整数,整数之间以一个空格分开。【输出】只有一行,按照格式要求依次输出三个整数,之间以一个空格分开。【输入样例】......
  • 华为OD机试C卷(100分)-最富裕的小家庭(C语言)
    ##题目描述在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为一个小家庭。现给你一颗树,请计算出最富裕的小家庭的财富和。##输入描述第一行为一个数N,表示成员总数,成员编号1~N。1≤N≤1000第二行为N个空格......
  • SciTech-点焊机-微波炉变压器制作一台1000W电流500A的加强版点焊机;
    用微波炉变压器制作一台加强版点焊机:输出电流500A,功率1000瓦微波炉有大功率全铜变压器。初级线圈由大功率可控硅控制导通时间;次级拆除,用超大粗铜导线绕3圈或数圈,得到低压大功率次级输出,作为点焊能源。常用的微波炉电路图:控制板部分由“低压变压器”输送功率;2.整机大部......
  • 2024华为OD机试真题- 找出作弊的人-(C++/Python)-C卷D卷-100分
     2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++) 题目描述公司组织了一次考试,现在考试结果出来了,想看一下有没人存在作弊行为,但是员工太多了,需要先对员工进行一次过滤,再进一步确定是否存在作弊行为。过滤的规则为:找到分差最小的员工ID对(p1,p2)列表,要求p1<......
  • HC32L130/HC32L136开发之软件模拟IIC驱动AT24C64
    一、AT24C64电路图二、程序编码1.定义I2C总线连接的GPIO端口/*定义I2C总线连接的GPIO端口,用户只需要修改下面4行代码即可任意改变SCL和SDA的引脚*/#defineRCC_I2C_PORT   SysctrlPeripheralGpio      /*GPIO端口时钟*/#definePORT_I2C_SCL  ......
  • 超冷门的社群引流玩法,日引精准粉100+
    在当今的网络环境中,社群有着多种多样的引流方式。今天,我要为大家分享的是一种简便易操作、适用于各个行业的社群引流方法。很多时候,我们都被找不到精准社群这个难题所困扰,自然也就难以进行有效的引流。那么,接下来就让我详细讲讲如何去寻觅这些社群,怎样达成精准引流,以及如......
  • AP5161恒流驱动芯片 输入100V 输出3A 内置MOS 汽车灯方案
    概述AP5161是一款高精度降压型大功率LED恒流驱动芯片。适用于输入电压100V以内的大功率LED恒流驱动电源。专利的高端电流检测、固定频率、电流模PWM控制方式,具有优异的线性调整率和负载调整率。芯片采用的特有恒流控制方式,使得LED输出电流精度达到±3%以内。芯......
  • AP5127 DC-DC降压恒流IC 输入12-100V 输出2.5A LED车灯方案
    产品描述AP5127是一款PWM工作模式,高效率、外围简单、内置功率管,适用于12-100V输入的高精度降压LED恒流驱动芯片。输出最大功率可达25W,最大电流2.5A。AP5127可实现全亮/半亮功能切换,通过MODE切换:全亮/半亮/循环模式。AP5127工作频率固定在140KHZ,同时内置抖频......