Find the Highest Altitude

題目描述

有 n+1 個點,起始海拔為 0。給定長度為 n 的陣列 gain,其中 gain[i] 是第 i 點到第 i+1 點的海拔變化。回傳最高海拔。

輸入:gain = [-5,1,5,0,-7]
輸出:1(海拔依序為 [0,-5,-4,1,1,-6],最高為 1)

輸入:gain = [-4,-3,-2,-1,4,3,2]
輸出:0(起點 0 就是最高的)

解題思路

1

初始化

currentAlt = 0(起點海拔), maxAlt = 0(起點也是候選最高點)

2

累加

遍歷 gain 陣列,每步 currentAlt += gain[i]。例如 gain[0]=-5 → currentAlt=-5

3

更新最大值

每步累加後比較 maxAlt = max(maxAlt, currentAlt),追蹤到目前為止的最高海拔

4

回傳

遍歷完所有 gain 後,maxAlt 就是整趟旅程的最高海拔

程式碼

C#

csharp
public class Solution {
    public int LargestAltitude(int[] gain) {
        int current = 0, max = 0;
        foreach (int g in gain) {
            current += g;
            if (current > max) max = current;
        }
        return max;
    }
}

TypeScript

typescript
function largestAltitude(gain: number[]): number {
    let current = 0, max = 0;
    for (const g of gain) {
        current += g;
        if (current > max) max = current;
    }
    return max;
}

Python

python
def largestAltitude(gain: list[int]) -> int:
    current = max_alt = 0
    for g in gain:
        current += g
        max_alt = max(max_alt, current)
    return max_alt

複雜度分析

| | Time | Space | |--|------|-------| | 本解法 | O(n) | O(1) |

遍歷 gain 陣列一次,每步做一次加法和一次比較,因此時間 O(n)。只用兩個變數追蹤當前海拔和最大海拔,空間 O(1)。

邊界情況

圖解

gain: [-5,1,5,0,-7]
前綴和
海拔: [0,-5,-4,1,1,-6]
取最大值
最高: 1

圖表展示前綴和的累加過程:起點為 0,依序加上 -5, 1, 5, 0, -7 得到海拔序列。過程中海拔在第 3 和第 4 個點達到最高值 1,最終回傳 1。

進階觀點

💡面試追問

  • Q: 這其實就是前綴和(Prefix Sum)嗎? A: 對,海拔序列就是 gain 陣列的前綴和。altitude[i] = gain[0] + gain[1] + ... + gain[i-1]。這題是前綴和的最基礎應用,只需追蹤累加過程中的最大值。

  • Q: 為什麼 maxAlt 初始值是 0? A: 因為起點海拔為 0,起點本身就是一個候選答案。如果 gain 全是負數(一路下坡),起點就是最高點,maxAlt 必須包含起點。

  • Q: 如果起點不是 0 怎麼辦? A: 將 currentAlt 和 maxAlt 都初始化為起點值即可,其餘邏輯不變。

理解測驗

🤔 為什麼初始的 maxAlt 要設為 0 而不是負無窮?

🤔 gain = [1,2,3] 時,各點海拔依序是什麼?

你可能也想看

1493. Longest Subarray of 1's After Deleting One Element724. Find Pivot Index

按 ← → 鍵切換課程