<LeetCode>121. 买卖股票的最佳时机

原创 2018年04月15日 10:34:54

假设你有一个数组,其中第 i 个元素是一支给定股票第 i 天的价格。

如果您只能完成最多一笔交易(即买入和卖出一股股票),则设计一个算法来找到最大的利润。

示例 1:

输入: [7, 1, 5, 3, 6, 4]
输出: 5

最大利润 = 6-1 = 5(不是 7-1 = 6, 因为卖出价格需要大于买入价格)

 

示例 2:

输入: [7, 6, 4, 3, 1]
输出: 0

在这种情况下, 没有交易完成, 即最大利润为 0。

解题思路一(最好):
1.始终保存最小的买入价格
2.始终保存最大的利润
比如数据2,7,1,3
首先找到最小买入是2,然后做差7-2=5,保存利润,然后到最小买入变成1,此时利润还是5,然后到3,注意,这里就是核心了。
如果1后面出现的数字足够大,大到和1做差的值大于5,那么最大利润值就改变,否则,最大利润还是5.
这里暗含的逻辑是,后面的数如果减1的差肯定比减2的差来的大。

class Solution {
public:
	int maxProfit(vector<int>& prices) {
		int result = 0;
		int buy = INT_MAX;
		for (int price : prices) {
			buy = min(buy, price);
			result = max(result, price - buy);
		}
		return result;
	}
};


解题思路二:

遍历找后 - 前差最大的。

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        vector<int> res;
        //其实就是找数组中的后序 - 前序的最大差值
        if(prices.size() == 0)
            return 0;
        for(int i = 0;i < prices.size()-1;i++)
        {
            //找从i开始的最大值
            int max = -1;
            for(int j = i+1;j < prices.size();j++)
            {
                if(prices[j] > max)
                {
                    max = prices[j];
                }
            }
            max = max - prices[i];
            res.push_back(max);
        }
        int r;
        int max = -1000;
        for(int i = 0;i < res.size();i++)
            if(max < res[i])
                max = res[i];
        if(max < 0)
            return 0;
        else 
            return max;
    }
};



【算法】动态规划算法—买卖股票的最佳时机系列(1-4)

买卖股票的最佳时机—1:题目:假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格。如果你最多只允许完成一次交易,设计一个算法来找出最大利润。解法:该题解法和最大连续子数组和的解法思路是一样的...
  • ChenVast
  • ChenVast
  • 2018-01-02 15:01:00
  • 627

LeetCode 121. 买卖股票的最佳时机

题目描述: 买卖股票的最佳时机        假设你有一个数组,其中第 i 个元素是一支给定股票第 i 天的价格。        如果您只能完成最多一笔交易(即买入和卖出一股股票),则设计一个算法来找...
  • qq_33168253
  • qq_33168253
  • 2018-04-08 13:05:37
  • 37

[Leetcode]2018.3.22买卖股票的最佳时机 II

买卖股票的最佳时机 II假设有一个数组,它的第 i 个元素是一个给定的股票在第 i 天的价格。设计一个算法来找到最大的利润。你可以完成尽可能多的交易(多次买卖股票)。然而,你不能同时参与多个交易(你必...
  • dangpianjikuang
  • dangpianjikuang
  • 2018-03-22 14:54:23
  • 130

Leetcode121 Best Time to Buy and Sell Stock(买卖股票的最佳时机1)

Say you have an array for which the ith element is the price of a given stock on day i. If you we...
  • cheidou123
  • cheidou123
  • 2017-09-11 21:46:48
  • 129

买卖股票的最佳时机I II III IV

买卖股票的最佳时机I II III IV I假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格。如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润。II假设有一...
  • u010669349
  • u010669349
  • 2017-12-22 22:47:22
  • 457

<LeetCode>121. 买卖股票的最佳时机

假设你有一个数组,其中第 i 个元素是一支给定股票第 i 天的价格。 如果您只能完成最多一笔交易(即买入和卖出一股股票),则设计一个算法来找到最大的利润。 示例 1: 输入: [7, 1, 5,...
  • w8253497062015
  • w8253497062015
  • 2018-04-15 10:34:54
  • 20

[LeetCode] 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...
  • coolwriter
  • coolwriter
  • 2018-04-17 16:10:31
  • 12

lintcode--买卖股票的最佳时机

假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格。如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润。 您在真实的面试中是否遇到过这个题?  Y...
  • wenyunlei520
  • wenyunlei520
  • 2017-07-18 09:16:40
  • 235

LintCode--买卖股票的最佳时机

原题链接:http://www.lintcode.com/zh-cn/problem/best-time-to-buy-and-sell-stock/ 假设有一个数组,它的第i个元素是一支给定...
  • chan15
  • chan15
  • 2015-09-21 20:08:54
  • 614

LintCode:买卖股票的最佳时机 II

LintCode:买卖股票的最佳时机 II贪心算法,只要后一天的价格大于前一天的价格就买入。Pythonclass Solution: """ @param prices: Given...
  • u012225151
  • u012225151
  • 2016-05-10 18:24:26
  • 210
收藏助手
不良信息举报
您举报文章:<LeetCode>121. 买卖股票的最佳时机
举报原因:
原因补充:

(最多只允许输入30个字)