• Single Number-C++中的异或


    Single Number

      Given an array of integers, every element appears twice except for one. Find that single one.

    Note:

      Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

    题意:给定一个整型数组,有n个整数,除了一个只出现过一次,其他的都出现了2次!找出只出现一次的整数。

    要求:算法是线性复杂度,无需使用额外的内存。

    解题:

      用二进制位的方式来思考。按位异或运算将两个运算分量的对应位进行异或,即相应位的值相同的,结果为 0,不相同的结果为 1。

      例如:2^4=6(010^100 =110).

      故只需对数组元素进行异或,出现两次的元素异或结果为0,0与只出现一次的元素异或结果即为答案。

      即:ans = 0;

            ans = A[0]^A[1]^A[2]....^A[i](The single one) ^....A[n-1];

    class Solution {
    public:
        int singleNumber(int A[], int n) {
            if(n == 0) return 0;
            int ans = 0;
            for(int i=0; i<n; i++)
                ans ^= A[i];
            return ans;
        }
    };

    C++中的位运算

      C++中位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。

      位运算符有:&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。

      其中,按位取反运算符是单目运算符,其余均为双目运算符。位运算符的优先级从高到低,依次为~、&、^、|,其中~的结合方向自右至左,且优先级高于算术运算符,其余运算符的结合方向都是自左至右,且优先级低于关系运算符。

     
  • 相关阅读:
    json 轻解读 转
    android file.mkdir()
    iOS摄像头采集和编码
    对安装React脚手架出错的情况做以详解
    DNGuard Enterprise v2.95 released
    DNGuard Enterprise v3.2 released
    DNGuard 专业版 v2.95 发布
    DNGuard 企业版 v3.1 发布
    Windows 2003 上使用 Windows Live Writer
    .Net 中枚举AppDomains
  • 原文地址:https://www.cnblogs.com/chenbjin/p/3575600.html
Copyright © 2020-2023  润新知