4
O(n^2) is very straight forward5
For all the possible pairs8
value[i] = max(value[i], value[i] + value[j] + i - j`)10
we can do this problem in O(n) as well11
values = [8, 1, 5, 2, 6]12
max_val = [0, 0, 0, 0, 0]13
max_val[i] = max(max_val[i-1]-1, values[i-1]-1)14
we have to do it once from left side and then from right side17
def maxScoreSightseeingPair(self, values: List[int]) -> int:18
left_max_vals = [float("-inf") for _ in range(len(values))]19
right_max_vals = [float("-inf") for _ in range(len(values))]21
for i in range(1, len(values)):22
left_max_vals[i] = max(left_max_vals[i - 1] - 1, values[i - 1] - 1)24
for i in range(len(values) - 2, -1, -1):25
right_max_vals[i] = max(right_max_vals[i + 1] - 1, values[i + 1] - 1)27
max_pair = float("-inf")28
for i in range(len(values)):30
max_pair, values[i] + max(left_max_vals[i], right_max_vals[i])