题目如下
题目的要求是要我们找出只出现一次的数字,其他的元素次数都是两次。
1.我一开始想到的方法是用map或者是set来实现。 如果用set,先直接遍历整个数组,如果set里面没有值,就把值放进去,如果set里面有值,就把set里面的哪个元素移除掉,最后一对一对就会消掉,最后只留下一个元素,那一个元素就是我们需要的了。
题解如下
public int singleNumber(int[] nums) {
HashSet<Integer> integers = new HashSet<>();
for (int num : nums) {
if (integers.contains(num)) {
integers.remove(num);
} else {
integers.add(num);
}
}
for (Integer integer : integers) {
return integer;
}
return 0;
}
2.官方的题解 采用的是异或的方法,整体思路和第一种解法差不多,两个数如果一样的话经过异或就会变成0,最后留下来的数就是唯一的数了。 题解如下
public int singleNumber(int[] nums) {
int res = 0;
for (int num : nums) {
res ^= num;
}
return res;
}
最后 好久没写文档了,感觉单纯的看书,看视频起到的学习的效果不大,还是得多写写文档,多敲敲代码才能更好的加深印象和学习