LeetCode 每日一题笔记
0. 前言
- 日期:2026.06.19
- 题目:1732. 找到最高海拔
- 难度:简单
- 标签:数组、前缀和、贪心
1. 题目理解
问题描述
骑手从海拔0出发,数组gain[i]代表第i到i+1个点的海拔变化量,遍历全程所有点位,返回全程出现过的最大海拔高度。
示例
输入:gain = -5,1,5,0,-7
输出:1
解释:各点位海拔依次为 0,-5,-4,1,1,-6,最大值为1。
2. 解题思路
核心观察
- 初始海拔为0,每遍历一个gain元素更新当前海拔;
- 全程最高海拔初始值为0,实时对比更新最大值;
- 本质是求前缀和数组中的最大值。
算法步骤
- 初始化当前海拔
cur=0、最大海拔max=0; - 遍历gain数组,累加得到新的当前海拔;
- 更新全局最大海拔;
- 遍历结束返回最大值。
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,全程可能无上坡。