只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 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-