LeetCode每日一题,1014.Best Sightseeing Pair
先看题目描述
算法和思路
这道题遍历一遍 A 数组即可,关键是遍历到第 i 个元素时,要注意到 A[i] + i 是个定值,找到 A[j] - j 的最大值即可,这道题可正向遍历,也可反向遍历,正向遍历时把 A[j] - j 看作定值,遍历到景点 j 时,最大化 A[i] + i + A[j] - j 的值其实就等价于求 [0, j - 1] 中 A[i] + i 的最大值 max,景点 j 的答案即为 max + A[j] - j,在从前往后遍历的过程中一直维护 ans 和 max 的值即可;反向遍历时,把 A[i] + i 看成定值,遍历到景点 i 时,最大化 A[i] + i + A[j] - j 的值其实就等价于求 [i + 1, len - 1] 中 A[j] - j 的最大值 max,景点 i 的答案即为 A[i] + i + max,在从后往前遍历的过程中一直维护 ans 和 max 的值即可
但是我一开始做时,想的是把 A[i] + i 看成定值,但用的却是从前往后遍历,于是维护 max 的过程就很麻烦,最后超出了时间限制
算法源码
下面会给出三种源码,分别是一开始超出时间限制的源码,正向遍历源码和反向遍历源码
1 | import java.util.*; |
1 | class Solution { |
1 | class Solution { |