1732. Find the Highest Altitude

練習日期:2026-01-31

難度:Easy

類型:Array、Prefix Sum

📘 題目敘述

一位騎士從海拔 0 開始騎自行車。

給定一個整數陣列 gain,其中 gain[i] 代表從第 i 個點騎到第 i + 1 個點時,海拔的變化量。

請你回傳在整段騎行過程中,所能到達的最高海拔高度

條件限制

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

🧠 解題思路

這題本質上就是在做一個「前綴和(prefix sum)」的過程:

  • 從海拔 0 開始
  • 依序把每一段的高度變化 gain[i] 加上去
  • 在過程中隨時記錄「目前最高的海拔」

因為題目只在乎「最高到過哪裡」,

所以我們不需要存下所有高度,只要邊走邊更新最大值即可。

所有變數

  • gain:每一段路程的高度變化量
  • now
    • 目前所在位置的海拔高度
    • 初始為 0
  • ans
    • 到目前為止出現過的最高海拔
    • 初始為 0
  • i:用來掃描 gain 陣列的索引

🪜 主要流程步驟

第一步:初始化高度

  • now = 0
    • 代表起點的海拔高度
  • ans = 0
    • 因為起點本身也是一個可能的最高點

第二步:依序累加高度變化

從左到右掃描 gain

  • 每一輪:
    • now += gain[i]
      • → 更新目前的海拔高度
    • ans = max(ans, now)
      • → 如果現在高度比之前都高,就更新答案

這樣可以確保:

  • 所有經過的高度都被考慮過
  • ans 永遠是目前為止的最高值

第三步:回傳最高海拔

  • 迴圈結束後
  • ans 就是整趟騎行中能到達的最高海拔
  • 直接回傳即可

💡 為什麼這樣做是正確的?

  • 高度變化是「累積性」的 → 適合用前綴和
  • 題目只要最大值,不需要保存整個高度序列
  • 時間複雜度 O(n)、空間複雜度 O(1)
  • 寫法直觀、好理解,也很符合題意

💻 程式碼實作

class Solution {
public:
    int largestAltitude(vector<int>& gain) {
        int now = 0;
        int ans = 0;
        for (int i = 0; i < gain.size(); i++) {
            now += gain[i];
            ans = max(ans, now);
        }
        return ans;
    }
};

https://leetcode.com/problems/find-the-highest-altitude/

作者: scottnick
撰寫日期: 2026-01-31
類別:
原文連結: https://scottnick.github.io/cpp-notes/all%20problems/1732-find-the-highest-altitude.html