示例:输入: [2,2,1]
输出: 1
解析一:
通过循环来判断每个数出现的次数,然后将次数为1的数输出
var singleNumber =function(nums){
//声明一个空对象用于记录
var obj={};
for(var i=0;i<nums.length;i++){
//此时读取对象的属性需要用[]
if(!obj[nums[i]]){
obj[nums[i]] =1;
}
else{
obj[nums[i]]+=1;
}
//取出属性值为1的
for(var j in obj){
if(obj[j] ==1)
return j;
}
}
解析二:通过位运算中的异或来求解,
两个相等的数异或为0;一个不为0的数与0异或为这个数本身
var singleNumber =function(nums){
var res =0
for(var i= 0;i<nums.length;i++){
res =res^nums[i];
}
return res;
}
解析三:通过数组的indexOf、lastIndexOf求解,即当indexOf和lastIndexOf求出的值相等,则说明该数组只含有一个;
var singleNumber =function(nums){
for(var i= 0;i<nums.length;i++){
if(nums.indexOf(nums[i]) ==nums.lastIndexOf(nums[i])){
return nums[i];
}
}
}
解析四:先对数组进行排序,然后比较相邻的数是否相等
var singleNumber =function(nums){
nums.sort((a,b)=>{return a-b});
for(var i=0;i<nums.length;){
if(nums[i]!=nums[i-1]||nums[i]!==nums[i+1]){
return nums[i]
}else{
i+=2;
}
}
}