3073. Maximum Increasing Triplet Value π
Description
Given an array nums
, return the maximum value of a triplet (i, j, k)
such that i < j < k
and nums[i] < nums[j] < nums[k]
.
The value of a triplet (i, j, k)
is nums[i] - nums[j] + nums[k]
.
Example 1:
Input: nums = [5,6,9]
Output: 8
Explanation: We only have one choice for an increasing triplet and that is choosing all three elements. The value of this triplet would be 5 - 6 + 9 = 8
.
Example 2:
Input: nums = [1,5,3,6]
Output: 4
Explanation: There are only two increasing triplets:
(0, 1, 3)
: The value of this triplet is nums[0] - nums[1] + nums[3] = 1 - 5 + 6 = 2
.
(0, 2, 3)
: The value of this triplet is nums[0] - nums[2] + nums[3] = 1 - 3 + 6 = 4
.
Thus the answer would be 4
.
Constraints:
3 <= nums.length <= 105
1 <= nums[i] <= 109
- The input is generated such that at least one triplet meets the given condition.
Solutions
Solution 1: Suffix Maximum + Ordered Set
We can consider enumerating $nums[j]$. Then, we need to find the largest $nums[i]$ on the left of $j$ such that $nums[i] < nums[j]$, and find the largest $nums[k]$ on the right of $j$ such that $nums[k] > nums[j]$.
Therefore, we can preprocess an array $right$, where $right[i]$ represents the maximum value to the right of $nums[i]$. Then, we can use an ordered set to maintain the values on the left of $nums[j]$, so that we can find the largest $nums[i]$ less than $nums[j]$ in $O(\log n)$ time.
The time complexity is $O(n \times \log n)$, and the space complexity is $O(n)$, where $n$ is the length of the array $nums$.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|