📅  最后修改于: 2023-12-03 15:15:27.879000             🧑  作者: Mango
HackerRank 是一个技能评估平台,为开发人员提供了可供练习和评估的编程问题。深入掌握算法和数据结构的实现方法将对程序员的生涯产生重大影响。活跃交易者是一个常见的算法问题之一,在本文中,我们将介绍如何解决这个问题。
给定一个整数数组,数组中的每个元素表示在第 i 天某股票的价格。你只能进行最多一次股票交易,买入和卖出股票的时间必须是在同一天,设计一个算法来计算能获取的最大利润。
例如,给定股票价格数组 [7,1,5,3,6,4] ,在第2天买入股票 $1,然后在第 5 天卖出股票 $6,最大利润为 $5。注意利润不能是 $7, 因为卖出价格需要大于买入价格。
一种简单的解决方案是使用两个嵌套循环,计算每个价格之间的利润,并返回最大利润。该算法运行时 O(n^2 ),此方法的时间复杂度可能过高,无法通过较大的输入来满足我们的需求。
更好的方法是在一次遍历中找到最小价格和最大利润。我们可以通过维护两个变量min_price和max_profit,其中min_price是到目前为止看到的最低价格,而max_profit是到目前为止看到的最大利润。
function maxProfit(prices){
let min_price = Infinity;
let max_profit = 0;
for (let i=0; i < prices.length; i++){
if (prices[i] < min_price){
min_price = prices[i];
} else if (prices[i] - min_price > max_profit) {
max_profit = prices[i] - min_price;
}
}
return max_profit;
}
上述函数的输出将为我们提供股票的最大利润。
HackerRank的“活跃交易者”问题是一个常见的算法问题,存储着挑战各种编程问题的程序员们。在上面提供的解决方案中,我们看到了如何通过维护最小的价格和最大的利润,使用一次for循环来计算股票的最大利润。这种解决方案不仅更快,而且还更容易理解。