Arrays 如何计算两种模式之和的n(n+;1)/2?

Arrays 如何计算两种模式之和的n(n+;1)/2?,arrays,math,sequence,combinatorics,Arrays,Math,Sequence,Combinatorics,假设我有一个数组,其范围为直到n,比如说11,也就是说 U=1234567891011 现在,我有一个数组-A(U的子数组): 以及一个数组-B(U的另一个子数组,与a没有任何共同之处): 请注意,这3个集合都已排序 我必须为每个(a[I+1]-a[I]-1)计算n(n+1)/2,其中I是数组的索引,a是广义数组 也可考虑两端的角部情况。他们将从第一个数字中减去1,然后计算n(n+1)/2,从11中减去最后一个数字,然后计算n(n+1)/2 对于A组:我们得到 (3-1-1)*+(4-3-1)*

假设我有一个数组,其范围为直到
n
,比如说11,也就是说

U=1234567891011

现在,我有一个数组-A(U的子数组):

以及一个数组-B(U的另一个子数组,与a没有任何共同之处):

请注意,这3个集合都已排序

我必须为每个
(a[I+1]-a[I]-1)
计算
n(n+1)/2
,其中
I
是数组的索引,
a
是广义数组

也可考虑两端的角部情况。他们将从第一个数字中减去1,然后计算

n(n+1)/2
,从11中减去最后一个数字,然后计算n(n+1)/2

对于A组:我们得到
(3-1-1)*+(4-3-1)*+(9-4-1)*+角盒
这里是角落案例:
(1-0)*+(11-9)*

x*表示x(x+1)/2

同样,对于集合B:我们有
(5-2-1)*+(6-5-1)*+(10-6-1)*+(2-1)*+(11-10)*

现在,我必须使用O(1)复杂度中的集合A和集合B来计算(AUB)的解。有办法做到这一点吗

对于O(N)复杂度,我刚刚合并了两个数组并应用上面的公式

A U B : 1,2,3,4,5,6,9,10

因此,解决方案=
(9-6-1)*+(11-10)*

也许您可以使用伸缩和 (). 我之所以这样想,是因为在每个循环(数组的每个索引)中,都要减去在上一个循环中添加的数字:

u[2] - u[1] - 1 + u[3] - u[2] - 1 + u[4] - u[3] - 1 + ... + u[n] - u[n-1]- 1 
这给了你:

- u[1] - 1-...-1 + u[n]
= u[n] - n - u[1]
此外,A和B没有共同之处,这就是为什么:

n = lenght(A) + length (B)
另外,由于您订购了您的号码:

u[1] = min ( A[1] , B[1] )
u[n] = max ( A[length[A]] , B[length[B]] )
所以我们有:

Solution = max ( A[length[A]] , B[length[B]] ) - lenght(A) - length (B) - min ( A[1] , B[1] )

我希望我能在这个问题上帮助你。(对不起,如果我在英语中犯了一些错误)。< /P>没有C++代码,没有C++答案。
u[1] = min ( A[1] , B[1] )
u[n] = max ( A[length[A]] , B[length[B]] )
Solution = max ( A[length[A]] , B[length[B]] ) - lenght(A) - length (B) - min ( A[1] , B[1] )