只出现一次的数字
Given a non-empty 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?
要求:时间复杂度O(n),空间复杂度O(1)
我在做的时候只想到第一种解法,使用Map进行存储,然后判断key是否出现过,出现过则删除,但是这样会导致空间复杂度为O(n),其实下面是第一种解法:
- 方法一
class Solution {
public int singleNumber(int[] nums) {
Map<Integer,Integer> map = new HashMap<>();
for (int i = 0;i<nums.length;i++){
if (map.containsKey(nums[i])){
map.remove(nums[i]);
continue;
}
map.put(nums[i],i);
}
Iterator iterator = map.entrySet().iterator();
Integer key = 0;
while (iterator.hasNext()){
Map.Entry entry = (Map.Entry) iterator.next();
key = (Integer) entry.getKey();
}
return key;
}
}
-
方法二
先贴上代码,是不是非常简单
class Solution { public int singleNumber(int[] nums) { int number = 0; for (int num: nums){ number = number ^ num; } return number; } }这里需要用到xor(异或)运算,应用于逻辑运算,数组符号为“⊕”,二进制中0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1)
