zoukankan      html  css  js  c++  java
  • 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++中位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。

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

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

     
  • 相关阅读:
    前端数组去重
    前端三栏布局
    JS运行三部曲(预编译)
    前端常用开发工具
    前端性能监控你会监控哪些数据? 如何做?
    H5与客户端交互的方式有哪些? 怎么做?
    http协议的状态码400,401,403,404,500,502,503,301,302等常见网页错误代码
    随笔记录
    Browser Events 常用浏览器事件
    MYSQL 索引的优点
  • 原文地址:https://www.cnblogs.com/chenbjin/p/3575600.html
Copyright © 2011-2022 走看看