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

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

  • 相关阅读:
    如何理解cat的输入输出重定向
    Vagrant网络设置
    Vagrant入门
    设计模式的原则
    单例模式
    LRU 实现缓存
    java注解
    java8---lambda表达式
    JUC--Callable 以及Lock同步锁
    JUC--闭锁 CountDownLatch
  • 原文地址:https://www.cnblogs.com/xukaiae86/p/11857939.html
Copyright © 2011-2022 走看看