2025-04-16:找到稳定山的下标。用go语言,给定一个整数数组 height,表示一列山的高度,其中 height[i] 表示第 i 座山的高度,还有一个整数 threshold。我们定义一个山为"稳定"的条件是:对于每座下标不为 0 的山,如果它左侧相邻的山的高度严格大于 threshold,那么这座山就是稳定的。而下标为 0 的山永远被认为不稳定。
请你返回一个数组,包含所有稳定山的下标,顺序可以任意。
2 <= n == height.length <= 100。
1 <= height[i] <= 100。
1 <= threshold <= 100。
输入:height = [1,2,3,4,5], threshold = 2。
输出:[3,4]。
解释:
下标为 3 的山是稳定的,因为 height[2] == 3 大于 threshold == 2 。
下标为 4 的山是稳定的,因为 height[3] == 4 大于 threshold == 2。
题目来自leetcode3285。
以下是根据你提供的代码和题目描述,详细的步骤过程:
过程描述
-
输入数据:
- 接收一组整数数组
height
,表示各座山的高度。 - 接收一个整数
threshold
,用于判断相邻山的高度是否超过这个阈值。
- 接收一组整数数组
-
初始化结果数组:
- 创建一个空数组
result
,用于存储所有稳定山的下标。
- 创建一个空数组
-
遍历山的高度:
- 从数组的第二个元素开始(即下标为 1),遍历到数组的最后一个元素。根据题目条件,下标为 0 的山不被考虑为稳定山。
-
判断稳定性的条件:
- 对于每个下标
i
(从 1 到 n-1):- 检查其左侧相邻的山,即
height[i-1]
,是否严格大于threshold
。 - 如果条件满足(即
height[i-1] > threshold
),则将当前山的下标i
添加到result
数组中。
- 检查其左侧相邻的山,即
- 对于每个下标
-
返回结果:
- 遍历完成后,返回
result
数组,即包含所有稳定山下标的数组。
- 遍历完成后,返回
复杂度分析
-
时间复杂度:
- 遍历数组的时间复杂度为 O(n),其中 n 是
height
数组的长度。由于只进行了一次线性遍历,所以时间复杂度为 O(n)。
- 遍历数组的时间复杂度为 O(n),其中 n 是
-
空间复杂度:
- 额外空间复杂度分析:
- 用于存储结果的
result
数组的空间复杂度为 O(m),其中 m 是稳定山的数量。在最坏情况下,如果所有山都是稳定的,m 与 n 可能相等,因此空间复杂度为 O(n)。但在大部分情况下,m 会小于 n。因此总的空间复杂度为 O(m),较常规情况下可以认为是 O(n)。
- 用于存储结果的
- 额外空间复杂度分析:
综合以上分析,时间复杂度为 O(n),额外空间复杂度为 O(m)(在某些情况下可视为 O(n))。
Go完整代码如下:
go
package main
import (
"fmt"
)
func stableMountains(height []int, threshold int) []int {
var result []int
for i := 1; i < len(height); i++ {
if height[i-1] > threshold {
result = append(result, i)
}
}
return result
}
func main() {
height := []int{1, 2, 3, 4, 5}
threshold := 2
results := stableMountains(height, threshold)
fmt.Println(results)
}

Python完整代码如下:
python
# -*-coding:utf-8-*-
def stable_mountains(height, threshold):
result = []
for i in range(1, len(height)):
if height[i - 1] > threshold:
result.append(i)
return result
if __name__ == "__main__":
height = [1, 2, 3, 4, 5]
threshold = 2
results = stable_mountains(height, threshold)
print(results)
