Best Sightseeing Pair LT1014

Posted taste-it-own-it-love-it

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Best Sightseeing Pair LT1014相关的知识,希望对你有一定的参考价值。

Given an array A of positive integers, A[i] represents the value of the i-th sightseeing spot, and two sightseeing spots i and j have distance j - i between them.

The score of a pair (i < j) of sightseeing spots is (A[i] + A[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: [8,1,5,2,6]
Output: 11
Explanation: i = 0, j = 2, A[i] + A[j] + i - j = 8 + 5 + 0 - 2 = 11

 

Note:

  1. 2 <= A.length <= 50000
  2. 1 <= A[i] <= 1000

 Idea 1.  max(A[i] + A[j] + i -j) (i < j) = max(max(A[i] + i) + A[j] -j), scan from left to right

Time complexity: O(n)

Space complexity: O(1)

 1 class Solution {
 2     public int maxScoreSightseeingPair(int[] A) {
 3         int maxScore = Integer.MIN_VALUE;
 4         int sumVal = Integer.MIN_VALUE;
 5         for(int i = 1; i < A.length; ++i) {
 6             sumVal = Math.max(sumVal, A[i-1] + (i-1));
 7             maxScore = Math.max(maxScore, A[i] - i + sumVal);
 8         }
 9         
10         return maxScore;
11     }
12 }

Idea 1.b scan from right to left, max(A[i] + A[j] + i -j) (i < j)  = max(max(A[j] -j) + A[i] + i)

 1 class Solution {
 2     public int maxScoreSightseeingPair(int[] A) {
 3         int maxScore = Integer.MIN_VALUE;
 4         int sumVal = Integer.MIN_VALUE;
 5         for(int i = A.length-2; i >= 0; --i) {
 6             sumVal = Math.max(sumVal, A[i+1] - (i+1));
 7             maxScore = Math.max(maxScore, A[i] + i + sumVal);
 8         }
 9         
10         return maxScore;
11     }
12 }

 

以上是关于Best Sightseeing Pair LT1014的主要内容,如果未能解决你的问题,请参考以下文章

1014. Best Sightseeing Pair

best matched pair

CF1637E Best Pair

CF1637E Best Pair

Codeforces Global Round 19 E. Best Pair

Codeforces Global Round 19 E. Best Pair