zoukankan      html  css  js  c++  java
  • LeetCode Q136 Single Number(Medium)

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

    翻译

    给定一个整型数组,除了其中一个元素出现一次,其他每个元素都出现两次。找出出现一次的元素。

    分析

    解法一:

      第一反应就是排序并遍历所有元素,计算每个元素出现的次数,然后输出只出现一次的元素,这样的时间复杂度为 O(log2n) ,空间复杂度为 O(N) 。时间复杂度已经十分理想,但是空间复杂度不稳定,如果数据为 100M、1G ,甚至 10G 的,那么空间申请也严重影响了效率,并且内存条岂不是爆炸了!?现在的问题是解决空间复杂度的问题。

    解法二:

      哪么那些数据可以提前删除呢?解法一中,如果一个元素出现两次,那这个元素就不是要找的元素,就可以删除统计它们出现次数元素。根据这一点,可以使用哈希表,遍历元素时,如果这个元素出现两次,就在哈希表中删除这个元素。时间复杂度为 O(n) ,空间复杂度最好为 O(1),最差为O(n / 2 + 1)。

    解法三:

      异或的使用

     A ⊕ A = 0 

     交换律:A ⊕ B = B ⊕ A  

     结合律:A ⊕ (B ⊕ C) = (A ⊕ B) ⊕ C 

      可以看出当有两个相同的数异或时,变为 0 。

      说到这里,大家应该都想到了方法,把所有数都异或一次,除了只出现一次的元素就会留下。

      算法就很简单,读入加异或,便得出答案。

    1 int n=0;
    2 n = int.Parse(Console.ReadLine());
    3 int ans=0;
    4 for (int i=0;i<n;i++)
    5     a ^ = int.Parse(Console.ReadLine());
    6 Console.WriteLine(a.ToString());

     

  • 相关阅读:
    fetch函数的使用-常见问题
    React的理解-入门指导
    Navicat for mysql 11.1.20激活
    sqlserver使用job删除过期备份文件
    sqlserver删除重复的数据
    提高code效率
    Wampserver红色橙色解决思路----端口冲突是关键
    java mvc框架系列总结ssh,ssm,servlet
    正则表达式入门案例C#
    SpringBoot开发之《兼容http和https同时访问时443端口被占用》
  • 原文地址:https://www.cnblogs.com/Bita/p/5314496.html
Copyright © 2011-2022 走看看