拍案叫绝的算法分析

在知乎上有一个拍案叫绝的算法,它主要用来通过位运算查找非重复的对象。具体的内容请查看:

https://www.zhihu.com/question/27547892

这里主要对两个算法的分析说明,小白一下,可能有的同学们刚刚入门:

第一个,有一个N元素的数组,其它都出现了两次,只有一个出现了一次,找出这个数,要求:时间复杂度为O(n)且不再开辟新的内存空间。

[2,2,1]===>1

[4,1,2,1,2]===>4

拍案叫绝的算法分析

看到了左面和右面两个分解没,把相关的数转化成二进制的形式,然后按位异或,这个大家肯定都会,比加法还简单,都不用处理进位。然后得到结果再转回到十进制,就是结果了。重点在第二个,有一个n个元素的数组,除了两个数只出现一次外,其余元素都出现两次,让你找出这两个只出现一次的数分别是几,要求时间复杂度为O(n)且再开辟的内存空间固定(与n无关)。

[1,2,2,1,3,4]===>[3,4]

还是看一下图:

拍案叫绝的算法分析

第一步,和上面的单一求解一致。没有什么问题,第二步,如何找出两个不同的单次出现的值呢?网上的分析说得清楚,肯定至少有一位是不同的,但是是哪一位呢?在这里,可以假定第一位,那么就如网上的动态图一致,将已知的数据分成了两组。

看一下图上的重点部分:用三种颜色来标明了可以有三种选择的方式,即第一个为1(0),第二为1(0),第三个为1(0)。然后根据这个,把原来的数据分成了2部分*3组,每一组都可以正确得到结果。也就是说,不用把全部三组都算出来,只要有其中一组就可以了。

这里之所以列出三组来,是为了说明,用任何一组都可以得出正确的结果。

相关文章:

  • 2021-07-07
  • 2021-06-29
  • 2021-04-06
  • 2022-12-23
  • 2023-04-03
  • 2021-11-14
  • 2021-08-20
  • 2021-11-03
猜你喜欢
  • 2021-12-03
  • 2021-04-18
  • 2021-05-17
  • 2021-12-16
  • 2021-06-30
相关资源
相似解决方案