📅  最后修改于: 2023-12-03 15:10:21.439000             🧑  作者: Mango
在数据处理中,经常面对需要寻找数组中两个元素之间的最大差的问题,比如给定一个包含股票每日价格的数组,我们要求出其中一次交易(买入和卖出对应两个数组元素,买入时间必须在卖出时间之前),使得利润最大的可能值。以下是一些思路和代码示例。
使用两个变量 minPrice
和 maxProfit
,分别记录迄今为止的最低价格和最大利润,遍历一次数组,更新这两个值即可。
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)。因此该算法是非常高效的,可以很快地处理大型数据集。