Description
You are given an integer array nums
. In one operation, you can select a subarray and replace it with a single element equal to its maximum value.
Return the maximum possible size of the array after performing zero or more operations such that the resulting array is non-decreasing.
Β
Example 1:
Input: nums = [4,2,5,3,5]
Output: 3
Explanation:
One way to achieve the maximum size is:
- Replace subarray
nums[1..2] = [2, 5]
with5
β[4, 5, 3, 5]
. - Replace subarray
nums[2..3] = [3, 5]
with5
β[4, 5, 5]
.
The final array [4, 5, 5]
is non-decreasing with size 3.
Example 2:
Input: nums = [1,2,3]
Output: 3
Explanation:
No operation is needed as the array [1,2,3]
is already non-decreasing.
Β
Constraints:
1 <= nums.length <= 2 * 105
1 <= nums[i] <= 2 * 105
Solution
Python3
class Solution:
def maximumPossibleSize(self, nums: List[int]) -> int:
N = len(nums)
nextGe = [N] * N
stack = []
for i, x in enumerate(nums):
while stack and x >= nums[stack[-1]]:
nextGe[stack.pop()] = i
stack.append(i)
i = res = 0
while i < N:
i = nextGe[i]
res += 1
return res