题目描述
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?
-
示例 1:
输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。 -
示例 2:
输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
限制:0 <= 数组长度 <= 105
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/gu-piao-de-zui-da-li-run-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
用一个变量保存最小购入价格,一个变量保存最大利润
最
大
利
润
=
m
a
x
(
当
前
最
大
利
润
,
当
前
价
格
−
当
前
最
小
价
格
)
最大利润=max(当前最大利润, 当前价格-当前最小价格)
最大利润=max(当前最大利润,当前价格−当前最小价格)
代码详解
class Solution {
public int maxProfit(int[] prices) {
int min_price = Integer.MAX_VALUE; // 最低购入价格
int max_profit = 0; // 最大利润
for(int p : prices) {
min_price = Math.min(p, min_price);
max_profit = Math.max(p - min_price, max_profit);
}
return max_profit;
}
}
注意点
- 当前价格减去当前最小价格所得到的最大利润即为答案