Best Sightseeing Pair
第28天。
今天的题目是Best Sightseeing Pair:
这道题的关键就是什么时候移动 i 这个下标,我们观察一下这个公式:A[i] + A[j] + i - j
,转化一下就成了(A[i] + i) + (A[j] - j)
,因此如果存在两个i
,即i1
和i2
的话,当A[i1] + i1 > A[i2] + i2
成立时,我们就可以用 i2
去替代原来的i1
。至于j
的话,我们只需要从头到尾遍历一遍即可,同时在穷举j
的时候,可以顺便穷举出i
:
1 | int maxScoreSightseeingPair(vector<int>& A) { |
我们把式子重写成A[j] + (A[i] + i - j)
,随着j++
,i - j
会减一,如果不改变 i
的话,(A[i] + i - j)
相比于之前就只是减一而已,如果要改变的话,A[i] + i - j = A[j] - 1
,则我们可以将循环简化成:
1 | int maxScoreSightseeingPair(vector<int>& A) { |