美文网首页
二进制数运算 - LC136 Single Number

二进制数运算 - LC136 Single Number

作者: 风烨 | 来源:发表于2017-11-12 06:24 被阅读0次

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

    public int singleNumber(int[] nums) {
        Arrays.sort(nums);
        int n = nums.length -1;
        for(int i = 0; i < n; i+= 2){
            if( nums[i] != nums[i+1]) return nums[i];
        }
        return nums.length%2 == 0 ? 0 : nums[n];
    }

可是仔细回忆,总觉得还有最理想的方法,毕竟在找对称数字字符串的时候有用到二进制数字的32个位标志(a -> z)字母是否出现过。最后搜索了一下其他二进制的算法和参考了大家分享,才知道想起还有异或运算。不得不提醒,int在java里面是用32位二进制表示的。 基础类型转换参考

    public int singleNumber(int[] nums) {
        int x = 0;
        for(int i:nums) x ^= i;
        return x;
    }

说到这里,必须要复习一下二进制数的基本运算了。

//或
1010 & 0101 == 0000 
1100 & 0110 == 0100
//与
1010 | 0101 == 1111
1100 | 0110 == 1110
//取反
~1111 == 0000
~0011 == 1100
//异或(相同得1,不同得0)
1010 ^ 0101 == 1111
1100 ^ 0110 == 1010

二进制运算参考

相关文章

  • 二进制数运算 - LC136 Single Number

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

  • LC136 Single Number

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

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

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

  • 【位运算】Single Number

    题目链接 https://leetcode.com/problems/single-number/descript...

  • 算法总结-位运算

    位运算符用于二进制运算 与运算 & 二进制数 n & 1 的结果为n的末位 异或运算 ^ 长度为 L 的二进制数 ...

  • 二进制数的运算方法

    二进制数的算术运算 二进制数的算术运算包括:加、减、乘、除四则运算,下面分别予以介绍。 二进制数的加法 根据“逢二...

  • SINGLE NUMBER 落单的数

    给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。样例 给出 [1,2,2,1...

  • Single Number

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

  • Java位运算符及二进制常识(转)

    一、位运算 二、位移运算 三、二进制数 以Java中最常使用的int类型为例(32位)。 ㈠ 符号位 二进制数最左...

  • Single Number II

    Single Number II 今天是一道有关数学和位运算的题目,来自LeetCode#137,难度为Mediu...

网友评论

      本文标题:二进制数运算 - LC136 Single Number

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