背景:
我在查看算法问题时,在给定一系列股票价格时确定max_stock_profit。我试图确定所述方法的时间复杂度,并在.min
方法中遇到数组上使用的each
。这让我想问这篇文章中的题目。
一般来说,例如,只需查看长度为1,000,000的数组上的.min
或.max
方法,就不会运行.min
或.max
数组需要线性时间O(n)来确定最小值或最大值,其中n是数组的长度?..
如果是,那么根据下面显示的示例代码,通过在.min
方法中运行.max
或each
方法,时间复杂度不会为O(n ^ 2)因为它需要在each
方法中运行另一次迭代来确定最小值?我认为代码段应该在O(n)时间运行,但我对.min
和.max
的工作方式缺乏了解是导致混乱的原因。
是否因为在仅包含2个值的数组上调用.min
,可以假设代码行在恒定时间O(1)内运行?任何帮助,以清除我对正在发生的事情的误解将不胜感激。感谢。
示例代码段:
stock_prices = [5, 7, 2 ,4, 9, 1, 8]
min_price = stock_prices[0]
max_profit = 0
stock_prices.each do |current_price|
min_price = [min_price, current_price].min
potential_profit = current_price - min_price
max_profit = [max_profit, potential_profit].max
end
答案 0 :(得分:1)
.min
中的.max
和each
操作正在应用于只有2个元素的数组,因此每个操作都是O(1)操作。更改n stock_prices
中的元素数量不会更改在每次迭代中找到.min
或.max
的时间量,它们与n无关。因此,整个块是O(n)。