2012.数组美丽值求和
https://leetcode.cn/problems/sum-of-beauty-in-the-array/
给你一个下标从 0 开始的整数数组 nums 。对于每个下标 i(1 <= i <= nums.length - 2),nums[i] 的 美丽值 等于:
2,对于所有0 <= j < i且i < k <= nums.length - 1,满足nums[j] < nums[i] < nums[k]1,如果满足nums[i - 1] < nums[i] < nums[i + 1],且不满足前面的条件0,如果上述条件全部不满足
返回符合 1 <= i <= nums.length - 2 的所有 nums[i] 的 美丽值的总和 。
示例 1:
输入:nums = [1,2,3]
输出:2
解释:对于每个符合范围 1 <= i <= 1 的下标 i :
- nums[1] 的美丽值等于 2示例 2:
输入:nums = [2,4,6,4]
输出:1
解释:对于每个符合范围 1 <= i <= 2 的下标 i :
- nums[1] 的美丽值等于 1
- nums[2] 的美丽值等于 0示例 3:
输入:nums = [3,2,1]
输出:0
解释:对于每个符合范围 1 <= i <= 1 的下标 i :
- nums[1] 的美丽值等于 0提示:
3 <= nums.length <= 10^51 <= nums[i] <= 10^5
python
class Solution:
def sumOfBeauties(self, nums: List[int]) -> int:
n = len(nums)
left_max = [0] * n # 记录从左到右的最大值
right_min = [0] * n # 记录从右到左的最小值
left_max[0] = nums[0]
for i in range(1, n):
left_max[i] = max(left_max[i - 1], nums[i])
right_min[n - 1] = nums[n - 1]
for i in range(n - 2, -1, -1):
right_min[i] = min(right_min[i + 1], nums[i])
total_beauty = 0
for i in range(1, n - 1):
if left_max[i - 1] < nums[i] < right_min[i + 1]:
total_beauty += 2
elif nums[i - 1] < nums[i] < nums[i + 1]:
total_beauty += 1
return total_beauty