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)
相关推荐
WanderInk6 小时前
深入解析:Java Arrays.sort(intervals, Comparator.comparingInt(a -> a[0])); 一行代码的背后功力
java·后端·算法
codeGoogle6 小时前
“ASIC项目90%会失败”,黄仁勋的“诅咒”劝退华为?
后端
追逐时光者6 小时前
一款基于 .NET 开源免费、轻量快速、跨平台的 PDF 阅读器
后端·.net
默默地离开7 小时前
前端开发中的 Mock 实践与接口联调技巧
前端·后端·设计模式
杨荧8 小时前
基于爬虫技术的电影数据可视化系统 Python+Django+Vue.js
开发语言·前端·vue.js·后端·爬虫·python·信息可视化
在雨季等你9 小时前
奋斗在创业路上的老开发
android·前端·后端
转转技术团队9 小时前
游戏账号大图生成
java·后端
程序员爱钓鱼9 小时前
Go语言实战案例-批量重命名文件
后端·google·go
大熊计算机9 小时前
大模型推理加速实战,vLLM 部署 Llama3 的量化与批处理优化指南
后端
程序员爱钓鱼9 小时前
Go语言实战案例-遍历目录下所有文件
后端·google·go