• 只出现一次的数字


    题目描述

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

    说明

    算法应具有线性时间复杂度,且不使用额外空间来实现。

    示例

    说明:

    • 输入
      • 第一行输入数组个数
      • 第二行输入数组元素
    • 输出
      • 打印输出所找到的只出现一次的数字

    示例 1 :

    输入: 
    3
    2 2 1
    
    输出: 
    1
    

    示例 2 :

    输入: 
    1    
    4 1 2 1 2
    
    输出: 
    4
    

    题解

    数组中除了一个数字只出现了一次,其它数字都出现了两次。要求算法具有线性复杂度 ({O(N)}) ,且不使用额外空间。那么只遍历了一遍数组,最终结果保存在原数组的某个位置。

    0 ^ a = aa ^ a = 0 可以得出,若对数组中任意两个相同的数字按位异或结果则为 0 ,最后将剩下唯一的出现了一次的数字。

    如果数组中除了某个元素出现奇数次以外,其余每个元素均出现偶数次,那么也可以使用此种算法求出出现奇数次的数字。

    代码

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int singleNumber(vector<int>& nums) 
    {
        int len = nums.size();
        for (int i = 1; i < len; i++)
        {
            nums[0] ^= nums[i];
        }
        return nums[0];
    }
    
    int main()
    {
        vector<int> nums;
        int n = 0, num = 0;
        cin >> n;
        while (n--)
        {
            cin >> num;
            nums.push_back(num);
        }
        cout << singleNumber(nums) << endl;
        return 0;   
    }
    

    返回顶部

  • 相关阅读:
    ELK 5.6.8 安装部署
    Port Forwarding in Windows
    python 压缩文件为zip后删除原文件
    Windows安装nginx服务
    redis 启动停止脚本
    使用sed替换指定文件指定行的指定文本
    auto和bool
    宽字符
    函数递归
    关于主机用户名显示为"-bash-4.1$"
  • 原文地址:https://www.cnblogs.com/peabits/p/10902836.html
Copyright © 2020-2023  润新知