Leetcode121. 买卖股票的最佳时机
题目描述
/**
* 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
*
* 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。
* 设计一个算法来计算你所能获取的最大利润。
*
* 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
*
*/
思路分析
- 选择股票买卖的最佳时机,可以使用暴力遍历的思想
- 使用双层循环,定义一个变量记录利润,然后不停的判断并更新此变量即可
- 优化
- 使用一次循环,定义两个变量,一个变量记录最低股票价格,一个变量记录最大利润
- 在一次遍历过程中更新两个遍历即可
源码及分析
/**
* @param prices 记录股票的集合
* @return 获取的最大利润
*/
public int maxProfit(int[] prices) {
//记录最低股票
int minStock = Integer.MAX_VALUE;
//记录最大获益
int maxProfit = 0;
//遍历数组,更新最低和最大获益
for (int i = 0; i < prices.length; i++) {
if (prices[i] < minStock) {
minStock = prices[i];
} else if ((prices[i] - minStock) > maxProfit) {
maxProfit = prices[i] - minStock;
}
}
return maxProfit;
}