Возможность определения максимальной прибыли может заключаться в отслеживании левого минимума и правого максимума элементов в массиве по каждому индексу в массиве.Затем, когда вы будете перебирать цены на акции, для любого данного дня вы будете знать самую низкую цену до этого дня, а также вы будете знать максимальную цену после (и включительно) этого дня.
Например,давайте определим min_arr
и max_arr
, с заданным массивом arr
.Индекс i
в min_arr
будет минимальным элементом в arr
для всех индексов <= i
(слева от включительно i).Индекс i
в max_arr
будет максимальным элементом в arr
для всех индексов >= i
(справа от i).Затем вы можете найти максимальную разницу между соответствующими элементами в max_arr
и `min_arr ':
def max_profit(arr)
min_arr = []
min_el = arr.first
arr.each do |el|
if el < min_el
min_el = el
min_arr << min_el
else
min_arr << min_el
end
end
max_arr = []
max_el = arr.last
arr.reverse.each do |el|
if el > max_el
max_el = el
max_arr.unshift(max_el)
else
max_arr.unshift(max_el)
end
end
max_difference = max_arr.first - min_arr.first
1.upto(arr.length-1) do |i|
max_difference = max_arr[i] - min_arr[i] if max_difference < max_arr[i] - min_arr[i]
end
return max_difference
end
Это должно выполняться за O (n) время, но я считаю, что оно занимает много места.