题目为 给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的距离为 j - i。
一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j):景点的评分之和减去它们两者之间的距离。
返回一对观光景点能取得的最高分。
题目为求A[i]+A[j]+i-j , 可以看成 A[i]+i 和A[j]-j的求和。我们遍历一次集合,找到从0->(i-1)找到最大的A[i]+i,然后最后的答案就是该节点和之前最大的A[i]+i的和。代码如下
public static int MaxScoreSightseeingPair(int[] A)
{
int maxL = 0;
int maxAll = 0;
for (int i = 0; i < A.Length; i++)
{
maxAll = Math.Max((A[i] - i + maxL), maxAll);
maxL = Math.Max((A[i] + i), maxL);
}
return maxAll;
}