You are given an integer array values where values[i] represents the value of the ith sightseeing spot. Two sightseeing spots i and j have a distance j - i between them.
The score of a pair (i < j) of sightseeing spots is values[i] + values[j] + i - j: the sum of the values of the sightseeing spots, minus the distance between them.
Return the maximum score of a pair of sightseeing spots.
Example 1:
Input: values = [8,1,5,2,6]
Output: 11
Explanation: i = 0, j = 2, values[i] + values[j] + i - j = 8 + 5 + 0 - 2 = 11
Example 2:
Input: values = [1,2]
Output: 2
Constraints:
- 2 <= values.length <= 5 * 104
- 1 <= values[i] <= 1000
从右往左遍历, 一旦发现最大值, 伴随着每一步,最大值-1, 因为一旦有新的最大值加入进来, 旧的最大值就永远都不会再变为最大值, 所以我们只需要维护一个变量来保存当前的最大值即可
impl Solution {
pub fn max_score_sightseeing_pair(values: Vec<i32>) -> i32 {
let mut ans = 0;
let mut max = 0;
for v in values.into_iter().rev() {
if max != 0 {
max -= 1;
ans = ans.max(v + max);
max = max.max(v);
continue;
}
max = max.max(v);
}
ans
}
}