📜  数组中两个元素之间的最大差(1)

📅  最后修改于: 2023-12-03 15:10:21.439000             🧑  作者: Mango

数组中最大差

在数据处理中,经常面对需要寻找数组中两个元素之间的最大差的问题,比如给定一个包含股票每日价格的数组,我们要求出其中一次交易(买入和卖出对应两个数组元素,买入时间必须在卖出时间之前),使得利润最大的可能值。以下是一些思路和代码示例。

思路

使用两个变量 minPricemaxProfit,分别记录迄今为止的最低价格和最大利润,遍历一次数组,更新这两个值即可。

代码示例
function findMaxProfit(prices) {
  let minPrice = prices[0], maxProfit = 0;
  for (let i = 1; i < prices.length; i++) {
    minPrice = Math.min(minPrice, prices[i]);
    maxProfit = Math.max(maxProfit, prices[i] - minPrice);
  }
  return maxProfit;
}
def find_max_profit(prices):
    min_price = prices[0]
    max_profit = 0
    for price in prices[1:]:
        min_price = min(min_price, price)
        max_profit = max(max_profit, price - min_price)
    return max_profit
public int maxProfit(int[] prices) {
    int minPrice = prices[0], maxProfit = 0;
    for (int i = 1; i < prices.length; i++) {
        minPrice = Math.min(minPrice, prices[i]);
        maxProfit = Math.max(maxProfit, prices[i] - minPrice);
    }
    return maxProfit;
}
复杂度分析

以上算法只需要遍历一次数组,时间复杂度为 O(n),空间复杂度为 O(1)。因此该算法是非常高效的,可以很快地处理大型数据集。