2025-04-16:找到稳定山的下标。用go语言,给定一个整数数组 height,表示一列山的高度,其中 height[i] 表示第 i 座山的高度,还有一个

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。

以下是根据你提供的代码和题目描述,详细的步骤过程:

过程描述

  1. 输入数据

    • 接收一组整数数组 height,表示各座山的高度。
    • 接收一个整数 threshold,用于判断相邻山的高度是否超过这个阈值。
  2. 初始化结果数组

    • 创建一个空数组 result,用于存储所有稳定山的下标。
  3. 遍历山的高度

    • 从数组的第二个元素开始(即下标为 1),遍历到数组的最后一个元素。根据题目条件,下标为 0 的山不被考虑为稳定山。
  4. 判断稳定性的条件

    • 对于每个下标 i(从 1 到 n-1):
      • 检查其左侧相邻的山,即 height[i-1],是否严格大于 threshold
      • 如果条件满足(即 height[i-1] > threshold),则将当前山的下标 i 添加到 result 数组中。
  5. 返回结果

    • 遍历完成后,返回 result 数组,即包含所有稳定山下标的数组。

复杂度分析

  • 时间复杂度

    • 遍历数组的时间复杂度为 O(n),其中 n 是 height 数组的长度。由于只进行了一次线性遍历,所以时间复杂度为 O(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)
相关推荐
期待のcode4 小时前
MyBatisX插件
java·数据库·后端·mybatis·springboot
华仔啊7 小时前
这 10 个 MySQL 高级用法,让你的代码又快又好看
后端·mysql
码事漫谈7 小时前
国产时序数据库崛起:金仓凭什么在复杂场景中碾压InfluxDB
后端
上进小菜猪8 小时前
当时序数据不再“只是时间”:金仓数据库如何在复杂场景中拉开与 InfluxDB 的差距
后端
盖世英雄酱581368 小时前
springboot 项目 从jdk 8 升级到jdk21 会面临哪些问题
java·后端
程序猿DD9 小时前
JUnit 5 中的 @ClassTemplate 实战指南
java·后端
Victor3569 小时前
Netty(14)如何处理Netty中的异常和错误?
后端
Victor35610 小时前
Netty(13)Netty中的事件和回调机制
后端
码事漫谈11 小时前
VS Code 1.107 更新:多智能体协同与开发体验升级
后端