程序员看到算法就容易High起来,但老实说外行看热闹,内行看门道。我一直觉得算法这个东西用什么精妙来形容,算得上是外行看热闹。
在这个问题的答案下,有两个算法:
分别是
@蔡啸和
@Irons Du提供的,很显然前者的算法看起来比较精妙,而后者的算法看起来简直就是low爆了。
但事实上,不考虑vector扩容开销的话,这俩算法的时间复杂度都是O(n),前者的优势在于其只需要俩指针空间,后者则直接把整个链表变成了一个vector,
也就是说后者是用空间换时间。
所以说这个看似很low的算法也是有其意义的,因为这个很low的算法通过指针获取元素的次数只有n+1或n次,而前者则需要获取n+n/2次。
当然,我们知道通过指针获取元素的性能是极高的,而且,1.5n和n+1的时间复杂度都是O(n)。但是如果通过指针获取元素的性能变得极差的时候(例如根本就是个远程调用的话),那么这种low爆的算法就会摇身一变成为最精妙的算法,而原来精妙的算法又会变为最SB的做法了。
算法没有高下之分,场景才是最重要的。
一个程序员成熟的标志就是从看到算法就会high,到看到薪酬才会high,,XD,,,,