我指的方法是双指针技术。其中第一个指针是一个简单的迭代器,第二个指针仅遍历与第一个指针相关的所有先前值。
这样,与对于每个节点,我们与其他所有节点进行比较的情况相比,完成的工作更少。最终将是 O(n^2)。
我的问题是双指针方法的速度是多少,为什么?
我指的方法是双指针技术。其中第一个指针是一个简单的迭代器,第二个指针仅遍历与第一个指针相关的所有先前值。
这样,与对于每个节点,我们与其他所有节点进行比较的情况相比,完成的工作更少。最终将是 O(n^2)。
我的问题是双指针方法的速度是多少,为什么?
因此,如果N
列表中有元素,则对元素进行重复数据删除i
将需要i
比较(后面有i
值)。因此,我们可以将比较总数设置为sum[i = 0 to N] i
。此总和计算结果为N(N+1)/2
,严格小于N^2
for N > 1
。
编辑:要解决总和,您可以这样处理。
1 + 2 + 3 + 4 + ... + (n-2) + (n-1) + n
从这里,您可以匹配对面的数字。这可以成为
2 + 3 + ... + (n-1) + (n+1)
通过匹配1
开头和n
结尾的。2
对和做同样的事情(n-1)
。
3 + ... + (n-1+2) + (n+1)
简化成为
3 + ... + (n+1) + (n+1)
您可以重复此n/2
次数,因为您每次都匹配两个数字。这将给我们留下n/2
术语的出现(n+1)
。将它们相乘并化简,我们得到(n+1)(n/2)
or n(n+1)/2
。
有关更多说明,请参见此处。
此外,这表明该总和仍然具有n^2
.