美文网首页
LC136 Single Number

LC136 Single Number

作者: Rookie118 | 来源:发表于2020-06-26 20:13 被阅读0次

本题链接:Single Number

本题标签:Hash TableBit Manipulation

本题难度:\color{Green}{Easy}

英文题目 中文题目

本题是137.Single Number II的简化版。

方案1: 利用map统计数字出现次数,然后遍历map找到出现次数为1的数字即为答案。

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int res = 0;
        unordered_map<int, int> mp;
        for(auto n : nums)
            ++mp[n];
        
        for(auto ele : mp)
            if(ele.second == 1)
            {
                res = ele.first;
                break;
            }
        return res;
    }
};

时间复杂度:O ( N )

空间复杂度:O ( N )


方案2: 利用数电知识推导出位运算公式

根据题意我们可以得出如下逻辑运算:

  1. 当某一个数出现2次时,其结果应为0,即1 * 1 = 0
  2. 当某一个数出现1次时,其结果应为1,即1 * 0 = 0 * 1 = 1

这里*代表某种运算逻辑,不是乘法的含义。
那么我们可以推理出如下结论:

  1. 某一个数出现0次为0,出现1次为1,出现2次为0。说明这是一种循环状态,其中有效状态为前2个,可以用模2运算来表达为0、1这2种状态。
  2. 用二进制来记录这2种状态需要至少1位二进制位,即可以用0、1来代表。
  3. 这样输入数字的每一个二进制位都可以用这种方式表达,因为二进制位的运算是互相独立的。如果再输入一个数字,对于每一位的位运算操作就可以表达如下:
    • 如果输入的是0,0->0,1->1,即2种状态无变化。
    • 如果输入的是1,0->1,1->0。

接下来我们就可以求出逻辑表达式了:

设当前状态为 X,输入为 Z,则 X 的真值表如下:

# X Z X_{new}
1 0 0 0
2 1 0 1
3 0 1 1
4 1 1 0

这里我们取 X_{new} = 1 的所有行中的 XZ 组成逻辑表达式,因为这代表了1这种情况,即数字出现1次的情况:
X_{new} = X\overline{Z} + \overline{X}Z = X\overline{Z} + \overline{X}Z =X \oplus Z

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int res = 0;
        for(int i = 0; i < nums.size(); ++i)
            res = res ^ nums[i];
        
        return res;
    }
};

时间复杂度:O ( N )

空间复杂度:O ( 1 )

相关文章

  • LC136 Single Number

    本题链接:Single Number 本题标签:Hash Table,Bit Manipulation 本题难度:...

  • 一篇文章搞懂面试中leetcode位操作算法题

    Single Number落单的数 落单的数 IISingle Number II Single Number I...

  • 二进制数运算 - LC136 Single Number

    开始看这道题,先想到的是存储所有数字和出现的次数然后找到唯一的那个数字。接着想到可以先排序,比较一下奇偶是否相等,...

  • single number

    题目描述 给定一个整数数组,除了一个元素外,每个元素都会出现两次。找到那一个出现一次的元素。注意:时间复杂度O(n...

  • Single number

    用异或

  • Single Number

    题目要求找出在算法的时间复杂度为线性时间,且不占据额外的内存 下面讲解算法:该算法主要用到了位运算中的异或运算^,...

  • Single Number

    Single Number 今天是一道有关位运算的题目,来自LeetCode(#136),难度为Medium,Ac...

  • Single Number

    Problem Given an array of integers, every element appears...

  • Single Number

    Given an array of integers, every element appearstwiceexc...

  • Single Number

    Given an array of integers, every element appearstwiceexc...

网友评论

      本文标题:LC136 Single Number

      本文链接:https://www.haomeiwen.com/subject/ojgufktx.html