Loading

Leetcode-136-只出现一次的数字

题目链接


题目描述

给定一个非空整数数组,只有一个元素只出现一次,其余每个元素均出现两次
找出只出现了一次的元素。

要求:

O(n)的时间复杂度,不使用额外的空间。



(好久没做题了,写几道简单的找找手感😁)

思路:

  1. 因为重复的元素都是两个,首先想到是排序,然后两个两个去判断。
    但是排序最快一般也是O(nlogn),不符合要求。(✖)

  2. 然后想到的是用哈希表,但是不能使用额外的空间。(✖)

  3. 看了解析才明白用抑或(^)运算😅,两个数的抑或其实就是二进制层的不进位加法
    所以两个a抑或后就是0,再与b抑或结果就是b。
    另外: 抑或运算有 交换律 和 结合律。

C++方法

输入的是处理好的数组,放入vector容器中。

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int res = 0;
        for (int i = 0; i < nums.size(); i++)
            res ^= nums[i];
        return res;
    }
};
posted @ 2022-01-07 11:18  ARUI丶  阅读(27)  评论(2编辑  收藏  举报