股票的最大利润
程序员文章站
2022-03-05 15:49:48
...
问题描述:
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。
注意:你不能在买入股票前卖出股票。
示例 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。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock
解析:
1 暴力求解
两层循环,每走一天求一下当前天买的最大利润,然后舍小取大
但效率太低了
我们不妨换种思路,
我们想利润最大,肯定不想在股票下跌期间买卖,
最好是在股票价钱最低的时候买入,
但也存在个问题,之后出售利润也可能不理想。
其实这是一种权衡思想
在涨价前买,之后每一天获取当天抛出利润,与原先利润相比,舍小取大,最终就可以得到一个最大利润咯。
class Solution {
public:
int maxProfit(vector& prices) {
if(prices.size() ==0 )
return 0;
//获取最低成本
int buy = 0;
int sell = 0;
int tmpEarn= 0;//暂时利润
int maxEarn =0;//最大利润
for(int i=0; i < prices.size(); ++i )
{
if(prices[i] < prices[buy]) //降价中
buy = i; //换今天买入
//否则 (+不加else都行,)
tmpEarn = prices[i] - prices[buy];//计算当前利润
//判断是否大于之前的利润,大于就更新
maxEarn = maxEarn > tmpEarn ? maxEarn : tmpEarn;
}
return maxEarn;
}
};
上一篇: 『与善仁』Appium基础 — 30、模拟手势点击坐标
下一篇: win10如何跳过开机密码