问题来源: https://www.hackerrank.com/contests/epiccode/challenges/white-falcon-and-sequence。 请点击链接查看参考资料。
我有一个整数序列(-10^6到10^6) A。我需要选择两个连续的不相交的A子序列,分别为x和y,它们的长度都是n。
然后你需要计算由∑x(i)y(n−i+1)
(从1开始编号)给出的总和。
我必须选择x和y使得总和最大化。
Eg:
Input:
12
1 7 4 0 9 4 0 1 8 8 2 4
Output: 120
Where x = {4,0,9,4}
y = {8,8,2,4}
∑x(i)y(n−i+1)=4×4+0×2+9×8+4×8=120
现在,我想到的方法大致是O(n^2),具体如下:
- 初始化两个变量
l = 0
和r = N-1
。这里,N
是数组的大小。 - 现在,对于
l=0
,我将计算当(l<r)
时的总和,这基本上是指从数组中的第0个位置开始的子序列。然后,我将增加l
并减少r
,以便得出从上述位置+1开始并且在右侧从right-1
开始的子序列。