给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1] 输出: 1
示例 2:
输入: [4,1,2,1,2] 输出: 4
1.思路1:
找到一个数字之后,扫描其余的,如果有重复,就pass,时间复杂度高,如果重复数字是最后一个,就是n^2
class Solution {
public int singleNumber(int[] nums) {
boolean flagA=false;
boolean flagB=true;
int tar=0;
for(int i=0;i<nums.length;i++){
tar=nums[i];
for(int j=0;j<nums.length;j++){
if(j==i){
continue;
}
if(tar==nums[j]){
flagB=false;
break;
}
}
if(flagB){
flagA=true;
break;
}
flagA=false;
flagB=true;
}
return tar;
}
}2思路2:
利用异或,异或就是相同为0,不同为1;所以,如果一路异或下去,因为只有一个single值,剩下的就是那个single
public static int singleNumber_2(int[] nums) {
int number=0;
for(int i=0;i<nums.length;i++){
number^=nums[i];
}
return number;
}

本文介绍了一种在数组中寻找唯一出现一次元素的有效算法。通过两种思路对比,一种是传统遍历比对方法,时间复杂度较高;另一种是利用位运算中的异或操作,能够以线性时间复杂度解决问题,并且不需要额外的空间开销。

被折叠的 条评论
为什么被折叠?



