刷题的日常-找到最高海拔

102 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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;
    }
}

image.png