LeetCode 136. Single Number 题解—— Java

本文介绍了一个LeetCode上的经典问题:在一个数组中找出仅出现一次的数字。通过使用异或运算的方法,详细解释了如何高效地解决这个问题,并给出了Java实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:https://leetcode.com/problems/single-number/#/description

题目要求:给定一个数组,其中只有一个数字只出现一次,其他数字都出现两次,找出这个只出现一次的数字。

思路:将所有数字进行异或操作,最终得到的结果就是只出现一次的数。因为异或“相同为0,不同为1”,那么一个数的和它本身异或,就会变为0。

举例如下:对于数字 3,7 , 3 进行异或运算 (在此使用4位来表示整数。在java中in为32位,其实也就是前面的28位都为0省略不写, 不会影响结果和异或运算过程)

3 ^ 7 = (0011) ^ (0111) = (0100)

将上述异或的结果再和最后一个3异或 (0100)^ 3 = (0100)^ (0011) = (0111) = 7; 也就找到了只出现一次的数


我们将3个数的异或写到一起

   (0011)                 3

   (0111)                 7

^ (0011)            ^   3

——————      -------------

标红的两行完全相同,异或的结果就是0,所以整个式子的异或结果就是中间那一个行所表示的值,也就是只出现一次的值。


Java代码:

public class Solution {
	// 找到数组中只出现一次的数
    public int singleNumber(int[] nums) {
        // 使用异或操作
    	int temp = 0;
    	for(int i=0; i<nums.length; i++){
    		temp = temp ^ nums[i];
    	}
    	return temp;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值