You are given a 0-indexed integer array nums. For each index i (1 <= i <= nums.length - 2) the beauty of nums[i] equals:
2, if nums[j] < nums[i] < nums[k], for all0 <= j < i and for alli < k <= nums.length - 1.
1, if nums[i - 1] < nums[i] < nums[i + 1], and the previous condition is not satisfied.
0, if none of the previous conditions holds.
Return the sum of beauty of all nums[i] where 1 <= i <= nums.length - 2.
Example 1:
Input: nums = [1,2,3]
Output: 2
Explanation: For each index i in the range 1 <= i <= 1:
- The beauty of nums[1] equals 2.
Example 2:
Input: nums = [2,4,6,4]
Output: 1
Explanation: For each index i in the range 1 <= i <= 2:
- The beauty of nums[1] equals 1.
- The beauty of nums[2] equals 0.
Example 3:
Input: nums = [3,2,1]
Output: 0
Explanation: For each index i in the range 1 <= i <= 1:
- The beauty of nums[1] equals 0.
Constraints:
3 <= nums.length <= 105
1 <= nums[i] <= 105
Solutions
Solution 1: Preprocessing Right Minimum + Traversing to Maintain Left Maximum
We can preprocess the right minimum array \(right\), where \(right[i]\) represents the minimum value in \(nums[i..n-1]\).
Then we traverse the array \(nums\) from left to right, while maintaining the maximum value \(l\) on the left. For each position \(i\), we judge whether \(l < nums[i] < right[i + 1]\) holds. If it does, we add \(2\) to the answer. Otherwise, we judge whether \(nums[i - 1] < nums[i] < nums[i + 1]\) holds. If it does, we add \(1\) to the answer.
After the traversal, we can get the answer.
The time complexity is \(O(n)\), and the space complexity is \(O(n)\). Here, \(n\) is the length of the array \(nums\).