TheAlgorithms-Ruby/data_structures/arrays/find_the_highest_altitude.rb
2021-03-09 19:21:14 -08:00

74 lines
1.4 KiB
Ruby
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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