LeetCode: 121. Best Time to Buy and Sell Stock

LeetCode: 121. Best Time to Buy and Sell Stock

题目描述

Say you have an array for which the ith element is the price of a given stock on day i.

If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.

Example 1:
Input: [7, 1, 5, 3, 6, 4]
Output: 5

max. difference = 6-1 = 5 (not 7-1 = 6, as selling price needs to be larger than buying price)
Example 2:
Input: [7, 6, 4, 3, 1]
Output: 0

In this case, no transaction is done, i.e. max profit = 0.

题目大意: 给定一个表示每天的股价的数组,求出只有一次买卖机会下,最大收益。

解题思路

要想在第 i 天卖出股票获得最大收益,则必须在第 i 天前股价最小的那天买入股票。 因此只需要求得第 i 天前股价的最小值,在第 i 天卖出的最大收益就是第 i 天的股价减去第 i 天前股价的最小值。最后求得使得收益最大的 i 即可。

AC 代码

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int frontNMinPrices = INT_MAX; // 前 i 天股价的最小值
        int profit = 0;                // 前 i 天买卖收益的最大值

        for(int i = 0; i < prices.size(); ++i)
        {
            // 计算前 i 天股价的最小值
            if(frontNMinPrices > prices[i]) frontNMinPrices = prices[i];

            // 计算第 i 天卖出收益的最大值,并判断其是不是 "前 i 天买卖收益的最大值"
            if(profit < prices[i] - frontNMinPrices)  profit = prices[i] - frontNMinPrices;
        }

        return profit;
    }
};
全部评论

相关推荐

感性的干饭人在线蹲牛友:🐮 应该是在嘉定这边叭,禾赛大楼挺好看的
点赞 评论 收藏
分享
像好涩一样好学:这公司我也拿过 基本明确周六加班 工资还凑活 另外下次镜头往上点儿
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务