返回介绍

solution / 1700-1799 / 1732.Find the Highest Altitude / README

发布于 2024-06-17 01:03:15 字数 3932 浏览 0 评论 0 收藏 0

1732. 找到最高海拔

English Version

题目描述

有一个自行车手打算进行一场公路骑行,这条路线总共由 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 。

示例 2:

输入:gain = [-4,-3,-2,-1,4,3,2]
输出:0
解释:海拔高度依次为 [0,-4,-7,-9,-10,-6,-3,-1] 。最高海拔为 0 。

 

提示:

  • n == gain.length
  • 1 <= n <= 100
  • -100 <= gain[i] <= 100

解法

方法一:前缀和(差分数组)

我们假设每个点的海拔为 $h_i$,由于 $gain[i]$ 表示第 $i$ 个点和第 $i + 1$ 个点的海拔差,因此 $gain[i] = h_{i + 1} - h_i$。那么:

$$ \sum_{i = 0}^{n-1} gain[i] = h_1 - h_0 + h_2 - h_1 + \cdots + h_n - h_{n - 1} = h_n - h_0 = h_n $$

即:

$$ h_{i+1} = \sum_{j = 0}^{i} gain[j] $$

可以发现,每个点的海拔都可以通过前缀和的方式计算出来。因此,我们只需要遍历一遍数组,求出前缀和的最大值,即为最高点的海拔。

实际上题目中的 $gain$ 数组是一个差分数组,对差分数组求前缀和即可得到原海拔数组。然后求出原海拔数组的最大值即可。

时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为数组 $gain$ 的长度。

class Solution:
  def largestAltitude(self, gain: List[int]) -> int:
    return max(accumulate(gain, initial=0))
class Solution {
  public int largestAltitude(int[] gain) {
    int ans = 0, h = 0;
    for (int v : gain) {
      h += v;
      ans = Math.max(ans, h);
    }
    return ans;
  }
}
class Solution {
public:
  int largestAltitude(vector<int>& gain) {
    int ans = 0, h = 0;
    for (int v : gain) h += v, ans = max(ans, h);
    return ans;
  }
};
func largestAltitude(gain []int) (ans int) {
  h := 0
  for _, v := range gain {
    h += v
    if ans < h {
      ans = h
    }
  }
  return
}
impl Solution {
  pub fn largest_altitude(gain: Vec<i32>) -> i32 {
    let mut ans = 0;
    let mut h = 0;
    for v in gain.iter() {
      h += v;
      ans = ans.max(h);
    }
    ans
  }
}
/**
 * @param {number[]} gain
 * @return {number}
 */
var largestAltitude = function (gain) {
  let ans = 0;
  let h = 0;
  for (const v of gain) {
    h += v;
    ans = Math.max(ans, h);
  }
  return ans;
};
class Solution {
  /**
   * @param Integer[] $gain
   * @return Integer
   */
  function largestAltitude($gain) {
    $max = 0;
    for ($i = 0; $i < count($gain); $i++) {
      $tmp += $gain[$i];
      if ($tmp > $max) {
        $max = $tmp;
      }
    }
    return $max;
  }
}
#define max(a, b) (((a) > (b)) ? (a) : (b))

int largestAltitude(int* gain, int gainSize) {
  int ans = 0;
  int h = 0;
  for (int i = 0; i < gainSize; i++) {
    h += gain[i];
    ans = max(ans, h);
  }
  return ans;
}

方法二

class Solution:
  def largestAltitude(self, gain: List[int]) -> int:
    ans = h = 0
    for v in gain:
      h += v
      ans = max(ans, h)
    return ans

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文