找到最高海拔
难度:
标签:
题目描述
代码结果
运行时间: 20 ms, 内存: 16.0 MB
/*
* 思路:
* 1. 使用累加器和Stream API来处理数组。
* 2. 使用IntStream从0遍历到gain.length,对每个索引计算海拔高度。
* 3. 返回所有海拔高度中的最大值。
*/
import java.util.stream.IntStream;
public class HighestAltitudeStream {
public static int largestAltitude(int[] gain) {
int[] altitude = new int[gain.length + 1];
IntStream.range(0, gain.length).forEach(i -> altitude[i + 1] = altitude[i] + gain[i]);
return IntStream.of(altitude).max().orElse(0);
}
public static void main(String[] args) {
int[] gain1 = {-5, 1, 5, 0, -7};
int[] gain2 = {-4, -3, -2, -1, 4, 3, 2};
System.out.println(largestAltitude(gain1)); // 输出: 1
System.out.println(largestAltitude(gain2)); // 输出: 0
}
}
解释
方法:
这道题目通过计算从起点出发到每个点的海拔高度,然后找出最高的海拔。首先,初始化当前海拔(cur_height)为0,这是起始点的海拔。同时,用一个变量(max_height)来跟踪遇到的最高海拔,也初始化为0。然后,遍历数组 gain,每次通过累加 gain[i] 来更新当前海拔,每次更新后,比较并可能更新最高海拔。这样,遍历完成后,max_height 将包含最大海拔值。
时间复杂度:
O(n)
空间复杂度:
O(1)
代码细节讲解
🦆
在代码实现中,为什么选择将`cur_height`和`max_height`初始值都设为0?
▷🦆
对于`gain`数组的遍历,是如何确保在每一步都正确地更新了当前海拔和最高海拔的?
▷🦆
如果`gain`数组中所有值都是负数,`max_height`在算法中如何处理,以便仍能正确返回最高海拔?
▷🦆
这种算法实现是否适用于所有规模的输入,例如非常小或非常大的`n`值?
▷