Find the Highest Altitude

# Find the Highest Altitude

# There is a biker going on a road trip. The road trip
# consists of n + 1 points at different altitudes. The
# biker starts his trip on point 0 with altitude equal 0.

# You are given an integer array gain of length n where
# gain[i] is the net gain in altitude between points i​​​​​​
# and i + 1 for all (0 <= i < n).

# Return the highest altitude of a point.

# Example 1:
#
# Input: gain = [-5,1,5,0,-7]
# Output: 1
# Explanation: The altitudes are [0,-5,-4,1,1,-6].
# The highest is 1.
#

#
# Approach 1: Creating an additional array
#

# @param {Integer[]} gain
# @return {Integer}
def largest_altitude(gain)
  arr = [0]

  # calculate altitude array
  (1..gain.count).each do |pointer|
    sum = arr[pointer - 1] + gain[pointer - 1]
    arr.push(sum)
  end

  # find maximum altitude
  max = 0
  arr.each { |i| max = i if max < i }
  max
end

gain = [-5, 1, 5, 0, -7]
largest_altitude(gain)
# Output: 1

gain = [-4, -3, -2, -1, 4, 3, 2]
largest_altitude(gain)
# Output: 0

#
# Approach 2: Without creating an additional array
#

# @param {Integer[]} gain
# @return {Integer}
def largest_altitude(gain)
  max_alt = alt = 0

  (0...gain.count).each do |i|
    alt += gain[i]

    max_alt = alt if max_alt < alt
  end

  max_alt
end

gain = [-5, 1, 5, 0, -7]
largest_altitude(gain)
# Output: 1

gain = [-4, -3, -2, -1, 4, 3, 2]
largest_altitude(gain)
# Output: 0