zoukankan      html  css  js  c++  java
  • 【LeetCode刷题】只出现一次的数字:妙解

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

       

    经典的位运算

    这道题目已经广为流传了,扫描数组,使用异或运算,最终的结果即是答案。

    至于为什么异或运算是题解,首先需要了解以下几点:

       

    什么是异或运算(xor)1 xor 1 = 0, 0 xor 0 = 0, 1 xor 0 = 1, 0 xor 1 = 1

    知道了什么是异或运算之后,就可以得出任意数字异或其自身等于0的结论。比如数字5,其二进制是101,那么就有101 xor 101 = 0

    知道了什么是异或运算之后,就可以得出任意数字异或0等于其本身的结论。

    位运算与顺序无关,即a xor b = b xor a, a xor b xor a = a xor a xor b = b

    因此,对于数组内只有一个数字出现了奇数次,其余数字都是出现偶数次的情况,异或运算刚好完美解决这个问题。

       

    class Solution {

    public:

    int singleNumber(vector<int>& nums) {

    int num = 0;

    for (vector<int>::size_type i = 0; i < nums.size(); ++i)

    num ^= nums[i];

    return num;

    }

    };

       

    作者:ronhou

    链接:https://leetcode-cn.com/problems/single-number/solution/q136-single-number-by-ronhou/

    来源:力扣(LeetCode

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    生产环境elk
    命令行操作es(转)
    makedown在线生成工具
    网站渗透测试工具zap2docker-stable
    ansible常用单模块
    程序员应该怎样和领导相处(转)
    Css设置毛玻璃
    tar.gz 文件解压
    Ubuntu:命令行安装可视化界面
    汇编语言开发总结
  • 原文地址:https://www.cnblogs.com/xukaiae86/p/11857939.html
Copyright © 2011-2022 走看看