力扣hot 100 的技巧题(1) 136. 只出现一次的数字

70 阅读1分钟

题目如下

image.png

题目的要求是要我们找出只出现一次的数字,其他的元素次数都是两次。

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;
}

最后 好久没写文档了,感觉单纯的看书,看视频起到的学习的效果不大,还是得多写写文档,多敲敲代码才能更好的加深印象和学习