题目:Single Number
难度:easy
问题描述:
Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
解题思路:
分别用来 哈希表、排序和位运算来解决。位运算最快~真的很巧妙。
代码如下:
public class E_136_SingleNumber {
public int singleNumber(int[] nums) {
HashSet<Integer> hs=new HashSet<>();
for(int i:nums){
if(hs.contains(i)){
hs.remove(i);
}else{
hs.add(i);
}
}
for(int i:hs){
return i;
}
return 0;
}
public static int singleNumber2(int[] nums){
Arrays.sort(nums);
for(int w:nums){
System.out.print(w+" ");
}
System.out.println();
for(int i=0;i<nums.length-1;i=i+2){
if(nums[i]!=nums[i+1]){
return nums[i];
}else{
continue;
}
}
return nums[nums.length-1];
}
public static int singleNumber3(int[] nums){
int len=nums.length;
for(int i=1;i<len;i++){
nums[0]=nums[0]^nums[i];
}
return nums[0];
}
public static void main(String[]args){
int[]nums={17,12,5,-6,12,4,17,-5,2,-3,2,4,5,16,-3,-4,15,15,-4,-5,-6};
System.out.println(singleNumber2(nums));
}
}