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)
相关推荐
追逐时光者4 分钟前
C#/.NET/.NET Core拾遗补漏合集(25年4月更新)
后端·.net
FG.8 分钟前
GO语言入门
开发语言·后端·golang
转转技术团队1 小时前
加Log就卡?不加Log就瞎?”——这个插件治好了我的精神
java·后端
谦行2 小时前
前端视角 Java Web 入门手册 5.5:真实世界 Web 开发——控制反转与 @Autowired
java·后端
uhakadotcom2 小时前
PyTorch 2.0:最全入门指南,轻松理解新特性和实用案例
后端·面试·github
bnnnnnnnn2 小时前
前端实现多服务器文件 自动同步宝塔定时任务 + 同步工具 + 企业微信告警(实战详解)
前端·javascript·后端
DataFunTalk2 小时前
乐信集团副总经理周道钰亲述 :乐信“黎曼”异动归因系统的演进之路
前端·后端·算法
DataFunTalk2 小时前
开源一个MCP+数据库新玩法,网友直呼Text 2 SQL“有救了!”
前端·后端·算法
idMiFeng2 小时前
通过GO后端项目实践理解DDD架构
后端
LemonDu2 小时前
Cursor入门教程-JetBrains过度向
人工智能·后端