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)
相关推荐
爬山算法13 分钟前
Hibernate(87)如何在安全测试中使用Hibernate?
java·后端·hibernate
WeiXiao_Hyy30 分钟前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
苏渡苇36 分钟前
优雅应对异常,从“try-catch堆砌”到“设计驱动”
java·后端·设计模式·学习方法·责任链模式
long3161 小时前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法
rannn_1111 小时前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
短剑重铸之日1 小时前
《设计模式》第十一篇:总结
java·后端·设计模式·总结
Dragon Wu2 小时前
Spring Security Oauth2.1 授权码模式实现前后端分离的方案
java·spring boot·后端·spring cloud·springboot·springcloud
一个有梦有戏的人3 小时前
Python3基础:进阶基础,筑牢编程底层能力
后端·python
爬山算法3 小时前
Hibernate(88)如何在负载测试中使用Hibernate?
java·后端·hibernate
独断万古他化3 小时前
【Spring 原理】Bean 的作用域与生命周期
java·后端·spring