您的位置:首页 > 编程语言 > Java开发

leetCode练习(136)

2016-11-10 22:02 218 查看
题目: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));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  位运算 leetcode java