Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/1014.html
1014. Best Sightseeing Pair (Medium)
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:
2 <= A.length <= 50000
1 <= A[i] <= 1000
Companies:
Wayfair
Related Topics:
Array
Solution 1.
-
class Solution { public int maxScoreSightseeingPair(int[] A) { int maxLeftScore = A[0] + 0; int maxScore = 0; int length = A.length; for (int i = 1; i < length; i++) { int curLeftScore = A[i] + i; int curRightScore = A[i] - i; int curScore = maxLeftScore + curRightScore; maxScore = Math.max(maxScore, curScore); maxLeftScore = Math.max(maxLeftScore, curLeftScore); } return maxScore; } } ############ class Solution { public int maxScoreSightseeingPair(int[] values) { int ans = 0, mx = values[0]; for (int j = 1; j < values.length; ++j) { ans = Math.max(ans, values[j] - j + mx); mx = Math.max(mx, values[j] + j); } return ans; } }
-
// OJ: https://leetcode.com/problems/best-sightseeing-pair/ // Time: O(N) // Space: O(N) class Solution { public: int maxScoreSightseeingPair(vector<int>& A) { stack<pair<int, int>> s; for (int i = A.size() - 1; i >= 0; --i) { if (s.empty() || s.top().second < A[i] - i) s.emplace(i, A[i] - i); } int ans = INT_MIN; for (int i = 0; i < A.size() - 1; ++i) { if (s.top().first <= i) s.pop(); ans = max(ans, A[i] + i + s.top().second); } return ans; } };
-
class Solution: def maxScoreSightseeingPair(self, values: List[int]) -> int: res, mx = 0, values[0] for i in range(1, len(values)): res = max(res, values[i] - i + mx) mx = max(mx, values[i] + i) return res ############ class Solution(object): def shipWithinDays(self, weights, D): """ :type weights: List[int] :type D: int :rtype: int """ l = max(weights) r = sum(weights) # [l, r) while l < r: mid = l + (r - l) / 2 need = 1 cur = 0 for w in weights: if cur + w > mid: need += 1 cur = 0 cur += w if need > D: l = mid + 1 else: r = mid return l
-
func maxScoreSightseeingPair(values []int) (ans int) { for j, mx := 1, values[0]; j < len(values); j++ { ans = max(ans, values[j]-j+mx) mx = max(mx, values[j]+j) } return } func max(a, b int) int { if a > b { return a } return b }
-
function maxScoreSightseeingPair(values: number[]): number { let ans = 0; let mx = values[0]; for (let j = 1; j < values.length; ++j) { ans = Math.max(ans, values[j] - j + mx); mx = Math.max(mx, values[j] + j); } return ans; }