LeetCode 每日一题笔记 日期:2026.06.19 题目:1732. 找到最高海拔

LeetCode 每日一题笔记

0. 前言

  • 日期:2026.06.19
  • 题目:1732. 找到最高海拔
  • 难度:简单
  • 标签:数组、前缀和、贪心

1. 题目理解

问题描述

骑手从海拔0出发,数组gain[i]代表第ii+1个点的海拔变化量,遍历全程所有点位,返回全程出现过的最大海拔高度。

示例

输入:gain = -5,1,5,0,-7

输出:1

解释:各点位海拔依次为 0,-5,-4,1,1,-6,最大值为1。

2. 解题思路

核心观察

  1. 初始海拔为0,每遍历一个gain元素更新当前海拔;
  2. 全程最高海拔初始值为0,实时对比更新最大值;
  3. 本质是求前缀和数组中的最大值。

算法步骤

  1. 初始化当前海拔cur=0、最大海拔max=0
  2. 遍历gain数组,累加得到新的当前海拔;
  3. 更新全局最大海拔;
  4. 遍历结束返回最大值。

3. 代码实现

java 复制代码
class Solution {
    public int largestAltitude(int[] gain) {
        int max = 0;
        
        int cur = 0;
        for (int i: gain){
            cur+=i;
            if (cur>max){
                max=cur;
            }
        }
        return max;
    }
}

4. 代码优化说明

java 复制代码
class Solution {
    public int largestAltitude(int[] gain) {
        int max = 0, cur = 0;
        for (int g : gain) {
            cur += g;
            // 使用Math.max替换if判断,消除分支
            max = Math.max(max, cur);
        }
        return max;
    }
}

5. 复杂度分析

  • 原版代码
    时间复杂度:O(n)O(n)O(n),单次遍历数组
    空间复杂度:O(1)O(1)O(1),仅常数临时变量,存在if分支判断
  • 优化代码
    时间复杂度:O(n)O(n)O(n),仅一次遍历,无分支跳转开销
    空间复杂度:O(1)O(1)O(1),无额外数组占用,消除if分支

6. 总结

  • 核心:前缀和遍历,实时维护全局最大值;
  • 优化亮点:Math.max替代if条件判断,精简代码,减少分支;
  • 关键点:初始最高海拔必须设为0,因为起点海拔为0,全程可能无上坡。