自我修炼_初级算法篇_leetcode_第5题

这篇博客介绍了LeetCode第5题的解决方案,该题要求在一个数组中找出只出现一次的元素。博主分享了两种方法,包括排序查找和使用异或运算。重点讲解了利用异或运算的思路,解释了异或运算的规则,并通过例子展示了如何通过异或找到唯一不重复的数字。
摘要由CSDN通过智能技术生成

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

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

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

输入: [4,1,2,1,2]
输出: 4

我想的两种方法 简单介绍一下 。一种就是暴力求解 两层for循环 一个一个排查 没有找到说明 没有重复  第二种,就是先排序 然后在找 。我会说一下这个的思想。代码就不粘贴了。这个 应该是跟第四题相似的思想。今天想要讲一下 我看评论区一个大佬的方法。

第二种我的思想是先排序之后。你会的到一个从小到大的数组。首先题目说相同的只会有2个。所以这个数组如果都是相同的。那么你的数组长度一定是偶数个。假如是8 。那么你是不是只用查看奇数个位置。对比奇数个和奇数+1个是否相符。如果相符就差下一个。那么就好了,现在如果长度为5。[4,1,2,1,2] 排序后 [1,1,2,2,4]

这样没有查到他有相同的 就可以把他获取到return下。

不光是这个【4,3,1,3,4】最后【1,3,3,4,4】

最后也可以的到。

最重要的!!!算法

class Solution {
    public int singleNumber(int[] nums) {
        int reduce = 0;
        for (int num : nums) {
            reduce =  reduce ^ num;
        }
        return reduce;
    }
}

作者:桂继宏
链接:https://leetcode-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值