题目要求:思路:得分为A[i]+A[j]+i-j,可分为(A[i]+i)和(A[j]-j),得分最高的是两者之和so遍历数组,维护两个值,一个是A[i]+i的最大值,一个是A[i]+i+A[j]-j的最大值,第二个值是不是由A[j]维护的——j的最大值,因为最大值也和i-j有关,所以要按照i-j保存最大值核心代码:res,localmax=0,0为index,valueinenumerate(A):#先保存全局结果,因为localmax保存的是A[i]+i,如果先改变localmax,则表示当前A[i]-i最大,则res变为A[i]+i+A[i]-i,无意义res=max(res,localmax-index+value)localmax=max(localmax,index+value)returnres完整代码:classSolution:defmaxScoreSightseeingPair(self,A:List[int])->int:res,localmax=0,0forindex,valueinenumerate(A):res=max(res,localmax-index+value)localmax=max(localmax,index+value)returnres直观:class解决方案:defmaxScoreSightseeingPair(self,A:List[int])->int:res,localmax=0,0foriinrange(len(A)):res=max(res,localmax-i+A[i])localmax=max(localmax,A[i]+i)返回res更直观:classSolution:defmaxScoreSightseeingPair(self,A:List[int])->int:res,localmax=0,0foriinrange(len(A)):j=ires=max(res,localmax+A[j]-j)localmax=max(localmax,A[i]+i)返回res
