【力扣刷题练习】121. 买卖股票的最佳时机

题目描述:

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

题目解答:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int low=INT32_MAX;
        int ans=0,len=prices.size();
        for(int i=0;i<len;i++){
            low=min(low,prices[i]);
            ans=max(ans,prices[i]-low);
        }
        return ans;
    }
};

题目思路:

初始化 low 为 INT32_MAX,表示当前为止的最低价格。初始化 ans 为0,表示到目前为止的最大利润。初始化 len 为数组 prices 的长度。

使用 for 循环遍历整个数组。在每次循环中,我们更新 low 和 ans。

low = min(low, prices[i]):更新 low 为当前价格和之前最低价格中的较小值。这样,low 始终表示到目前为止的最低价格。
ans = max(ans, prices[i] - low):更新 ans 为当前利润和之前最大利润中的较大值。这样,ans 始终表示到目前为止的最大利润。
循环结束后,返回 ans。

综上所述,这段代码使用了贪心算法的思想。在每一步,我们总是选择当前的最优解(即买入或卖出),而不考虑未来的情况。最终得到了最大的利润。

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值