3 solutions
-
0
题面描述
给定一个长度为的数组,每个元素的“美好值”是该位置之前最近的、值小于等于当前值的元素,如果没有这样的元素,则美好值为0。最终要求计算所有位置的美好值总和。输入格式为第一行一个整数,表示数组长度,第二行包含个整数,表示数组元素。输出为一个整数,表示美好值的总和。
思路:单调栈
本题题目意思可以转为找到左边第一个比它小的数,因此可以使用单调栈来求解该问题
题解
在这个问题中,我们需要计算每个位置的“美好值”,它表示的是该位置左边最近的、且值小于等于该位置值的元素。如果不存在这样的元素,则美好值为0。这个问题可以转化为寻找每个位置左边第一个比当前元素小的数。
为了解决这个问题,我们可以使用单调栈。单调栈是一种特殊的栈数据结构,在栈中保持元素的单调性。具体来说,我们在这个问题中需要一个单调递增的栈来存储数组中的元素。
实现步骤
- 初始化:创建一个栈用于存储元素,并初始化结果变量为0。
- 遍历数组:对于数组中的每个元素:
- 当栈不为空且栈顶元素大于当前元素时,弹出栈顶元素。这是为了保持栈的单调性。
- 如果栈不为空,说明栈顶元素就是左边第一个小于等于当前元素的值,将这个值累加到结果中。
- 将当前元素压入栈中。
- 输出结果:最后输出结果的总和。
时间复杂度
代码
C++
python代码
Java代码
- 1
Information
- ID
- 60
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 3
- Tags
- # Submissions
- 94
- Accepted
- 36
- Uploaded By