leetcode-只出现一次的数字

文章介绍了两种方法来找出数组中唯一出现一次的数字。第一种方法是通过双重循环记录每个数字的出现次数,当出现次数为1时返回该数字,但这种方法效率较低。第二种方法利用异或运算的性质,对数组所有元素进行异或操作,最终结果即为只出现一次的数字,这种方法效率较高但可能较难理解。
摘要由CSDN通过智能技术生成

第一种解题思路:

双重循环记录每种数字出现的次数,找到出现次数为1的数字即可,优点是好理解,缺点是运行效率低

public static int SingleNumber_1(int[] nums)
    {
        if (nums.Length <= 1)
            return nums[0];

        int length = nums.Length;
        //记录某一数字出现的 次数
        int count = 0;
        //最后查找出来的结果
        int result = 0;

        for (int i = 0; i < length; i++)
        {
            //获取要查找的数字
            int target = nums[i];
            count = 1;
            for (int j = 0; j < length; j++)
            {
                //不比较自身位置的数字
                if (j != i)
                {
                    if (target == nums[j])
                        count = 2;
                }
            }

            if (count == 1)
            {
                result = nums[i];
                break;
            }
        }

        return result;
    }

第二种解题思路:

使用异或运算,异或的原理是两个数相同为false,不同为true

异或运算,相异为真,相同为假,所以 a^a = 0 ;0^a = a

因为异或运算 满足交换律 a^b^a = a^a^b = b 所以数组经过异或运算,单独的值就剩下了

比如例子[4,1,2,1,2]异或运算可以变为这样----4^1^2^1^2 = 4^1^1^2^2 = 4^0^0 = 4

优点是运算效率高,缺点是理解起来有点难

//只出现一次的数字
    public static int SingleNumber_2(int[] nums)
    {
        //使用异或运算
        int length = nums.Length;
        int result = 0;

        for (int i = 0; i < length; i++)
        {
            result ^= nums[i];
        }
        
        return result;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值