zoukankan      html  css  js  c++  java
  • 只出现一次的数字---简单

    题目:

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

      说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

    示例:

      输入: [2,2,1]

      输出: 1

    思路:

      比较浅显的思路就是先排好序为O(nlogn);还有通过一个桶来装数字出现的个数,最后线性扫描,然而这需要而外的依赖数字范围的空间,时间复杂度为O(n),空间复杂度为O(n)。有没有更简单的呢,想想看过的csapp关于位级运算。异或运算有如下特性:a^b^a=b,由此可以得出本题的解法

    class Solution {
    public:
        int singleNumber(vector<int>& nums) {
            int length=nums.size();
            int result=nums[0];
            for(int i=1;i<length;++i)
            {
                result^=nums[i];
            }
            return result;
        }
    };

      看来主流解法就是这个呢。

  • 相关阅读:
    find
    fdisk
    falcon-eye
    ethtools
    e2fsck
    dpkg
    declare
    df
    debconf-utils
    区块链从零开始做开发(0):hyperledger Fabric2.3安装
  • 原文地址:https://www.cnblogs.com/manch1n/p/10308191.html
Copyright © 2011-2022 走看看