121. 买卖股票的最佳时机
题目描述
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
示例
解题思路
方法一: 暴力遍历法(不建议)
直接算出所有的可能,通过两个for循环,每次计算出比当前maxProfit高则交换
方法二: 一次遍历法
分析: 我们买股票想要赚最多的钱,那当然是在最低点买入是不(嘿嘿),因此可以通过遍历去找到这个最低点,然后,去找下个最低点的时候不断的进行分析判断当前利润是否更高,直到,仅需一次遍历即可
1、新建两个变量,一个记录当前遍历过程中历史最低点minPrice,一个记录当前过程中最大利润maxProfit
2、令minPrice为Integer类型中的最大值,即Integer.MAX_VALUE,maxProfit为0
3、开始遍历,使用两个if,一个用来判断有没有新的最低点,一个用来判断有没有产生新的最大利润,循环结束即可
完整代码
public class Solution {
public int maxProfit(int prices[]) {
int minPrice = Integer.MAX_VALUE;
int maxProfit = 0;
for (int i = 0; i < prices.length; i++) {
if (prices[i] < minPrice) {
minPrice = prices[i];
} else if (prices[i] - minPrice > maxProfit) {
maxProfit = prices[i] - minPrice;
}
}
return maxProfit;
}
}
题目进阶
可以多次买卖的情况下,计算最大利润
链接如下:使用的算法——动态规划、贪心