题目
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/single-number
思路
首先就是指针遍历,找到一个不同的就切下一个找,但这样会重复扫描一样的,如果记录扫过的,就会利用额外空间
而且这样如果最后一个是重复的,其实就没有找对,但还是之后没有一样的了
那就删除,但数组没有删除方法,最后只能想到位运算
在java中"^"表示异或,异或运算相同为0,相异为1;这是在位级别的,在数上就是相同的会全变为0,最后0和n异或变为n,那么只需要遍历所有数,再全部异或就好了
代码如下
class Solution {
public int singleNumber(int[] nums) {
int x=nums[0];
if(nums.length!=0){
for(int i=1;i<nums.length;i++){
x=x^nums[i];
}
}
return x;
}
}
运行结果