LeetCode 1014. 最佳观光组合
给定正整数数组
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)
。(A[i] + i)
和 (A[j] - j)
都是常数。所以这道题可以转换为,遍历A[j]
,对于j
,查找一个满足i < j
的最大的(A[i] + i)
。
代码如下
func maxScoreSightseeingPair(A []int) int {
var pre_max = A[0] + 0 //记录j之前最大的 A[i] + i
var result = 0
for j:=1;j<len(A);j++ { // 遍历 j,更新pre_max和result
if (result < pre_max + A[j] - j) {
result = pre_max + A[j] - j
}
if ( pre_max < A[j] + j ) {
pre_max = A[j] + j
}
}
return result
}