问题描述
问题链接:https://leetcode.com/problems/single-number/#/description
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 Solution {
public int singleNumber(int[] nums) {
/*
思路:用Map保存访问过的记录
*/
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
int len = nums.length;
for(int i = 0; i < len; i++){
map.put(nums[i],map.get(nums[i])==null?1:2);
}
for(Map.Entry<Integer,Integer> entry : map.entrySet()){
if(entry.getValue() == 1){
return entry.getKey();
}
}
return -9999999;
}
}
只打败了9.56%的Java代码。大神们真是666
讨论区
My O(n) solution using XOR
链接地址:https://discuss.leetcode.com/topic/1916/my-o-n-solution-using-xor
不说了,这个背下来吧。请收下我的膝盖。
known that A XOR A = 0 and the XOR operator is commutative, the solution will be very straightforward.
`
int singleNumber(int A[], int n) {
int result = 0;
for (int i = 0; i<n; i++)
{
result ^=A[i];
}
return result;
}