链接
一道智力题
很明显两次遍历可以求解,也很明显,这样肯定会超出时间限制。
思路:观察表达式,i<j,遍历时,对于每个元素j,values[j]-j是不变的,所以只要找出小于j的元素i中values[i]+i值最大的即可,而这个值在我们遍历时可以维护
class Solution {
public:
int maxScoreSightseeingPair(vector<int>& values) {
int sz=values.size();
int result=INT_MIN;
int maxi=INT_MIN;
for(int i=0;i<sz;i++){
result=max(maxi+values[i]-i,result);
maxi=max(maxi,values[i]+i);
}
return result;
}
};