快速找出故障机器

快速找出故障机器
    每个机器中存储一个ID,每个ID分别在两个机器中存储,若机器故障,则少一个ID。
    问题转换:有很多ID。(1)其中只有一个ID出现的次数少于2,其他都正常出现2次;
                                        (2)其中两个ID仅出现一次,其他都正常出现2次。
    目标:找到仅出现一次的机器ID。

解析:
    1. 使用链表,直接遍历列表,用一个数组记录下每个ID出现的次数,最后出现次数为1的的就是我们要找的ID。
  时间复杂度O(N),空间复杂度O(N)。
    2.使用Hash表,一次读取ID号,若出现两个ID号相同,则删除该ID(该ID出现两次,他正常),最后HASH表中
剩余的ID号就是要找的ID。  时间复杂度O(N),空间复杂度最坏情况下为O(N),最好的情况下为O(1)。
    3.使用函数法,函数的值为ID号。
        (1)依次将各个ID做异或操作,最后留下的函数值即为出现一个的ID;
        (2)若有两个ID都值出现一次,则异或后的值为两个丢失ID的异或值,这是需要寻找某位为1,根据该位将所有ID
分为两部分,一部分该位为1,一部分该位为0,两部分分别在做异或,得到的两个值即为丢失的两个ID号。 
 时间复杂度O(N),空间复杂度O(1)
        题外话:若丢失的两个ID号相同,则上述方法不可行。

若两个相同的ID丢失后,则需要用借助外部信息。
例如:事先得到所有ID的和、积、平方和等信息值。
        (1)和减去所有存在ID值,余下的差值即为丢失ID值。
        丢失两个ID,需要列两个方程,解方程即可。
            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值