Medium
You are given an integer array nums.
From any index i, you can jump to another index j under the following rules:
j where j > i is allowed only if nums[j] < nums[i].j where j < i is allowed only if nums[j] > nums[i].For each index i, find the maximum value in nums that can be reached by following any sequence of valid jumps starting at i.
Return an array ans where ans[i] is the maximum value reachable starting from index i.
Example 1:
Input: nums = [2,1,3]
Output: [2,2,3]
Explanation:
i = 0: No jump increases the value.i = 1: Jump to j = 0 as nums[j] = 2 is greater than nums[i].i = 2: Since nums[2] = 3 is the maximum value in nums, no jump increases the value.Thus, ans = [2, 2, 3].
Example 2:
Input: nums = [2,3,1]
Output: [3,3,3]
Explanation:
i = 0: Jump forward to j = 2 as nums[j] = 1 is less than nums[i] = 2, then from i = 2 jump to j = 1 as nums[j] = 3 is greater than nums[2].i = 1: Since nums[1] = 3 is the maximum value in nums, no jump increases the value.i = 2: Jump to j = 1 as nums[j] = 3 is greater than nums[2] = 1.Thus, ans = [3, 3, 3].
Constraints:
1 <= nums.length <= 1051 <= nums[i] <= 109import kotlin.math.max
import kotlin.math.min
class Solution {
fun maxValue(nums: IntArray): IntArray {
val f = IntArray(nums.size)
var cur = 0
for (i in nums.indices) {
cur = max(cur, nums[i])
f[i] = cur
}
var min = nums[nums.size - 1]
for (i in nums.size - 2 downTo 0) {
if (f[i] > min) {
f[i] = max(f[i], f[i + 1])
}
min = min(min, nums[i])
}
return f
}
}