开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
刷题的日常-2022年11月21号
一天一题,保持脑子清爽
找到最高海拔
来自leetcode的 1732 题,题意如下:
有一个自行车手打算进行一场公路骑行,这条路线总共由 n + 1 个不同海拔的点组成。自行车手从海拔为 0 的点 0 开始骑行。
给你一个长度为 n 的整数数组 gain ,其中 gain[i] 是点 i 和点 i + 1 的 净海拔高度差(0 <= i < n)。请你返回 最高点的海拔 。
示例1:
输入: gain = [-5,1,5,0,-7]
输出: 1
解释: 海拔高度依次为 [0,-5,-4,1,1,-6] 。最高海拔为 1 。
理解题意
通过题意,我们可以将信息整理如下:
- 题目给出一个数组,代表每次前进的高度差
- 数组里面代表的是和上一个点的差异值
- 我们从海拔0的位置出发,每次都会将海拔变化gain[i]
- 要求返回我们所经过的最高海拔
做题思路
简单题,只是初看题意有点懵逼,没有注意到开始位置是0海拔高度,所以纠结了许久。那么我们就可以从海拔为0的位置开始,一直往后扫描,将之前的高度加上当前的高度差,然后比较之前出现的最大值,取两者最大即可,步骤如下:
- 开辟两个变量,一个用于保存最大结果,一个保存上一次的海拔,并初始化为0
- 遍历高度差数组
- 将上一次的高度加上当前的高度差
- 将最高结果和当前的高度进行比较
- 接受最大值
- 返回最终结果即可
代码实现
代码实现如下,因为只需要遍历一次数组,所以时间复杂度为O(n),空间复杂度为O(1):
public class Solution {
public int largestAltitude(int[] gain) {
int res = 0, pre = 0;
for (int num : gain) {
res = Math.max(res, pre += num);
}
return res;
}
}