[LeetCode 题解]:Best Time to Buy and Sell Stock
前言
【LeetCode 题解】系列传送门: http://www.cnblogs.com/double-win/category/573499.html
1.题目描述
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.
2. 题意
给定一个整数数组Array用以表示某股票在每一天的价格,即该数组中第i个元素表示第i天的价格。
假如用户在给定的天数内只能完成一次交易(即在某一天购买该股票,然后在另一天将其抛售)。请设计一个算法,使得用户在此交易过程中获得最大利润。
3. 思路
规则:一只股票必须先买入,然后再售出。
采用动态规划的思路:
使用两个变量记录当前最小值minPrice,以及当前最大值maxPrice。
Profit的递归过程,可以按照如下状态变换方程表示:
4: 解法
class Solution { public: int maxProfit(vector<int> &prices) { if(prices.size()<=1) return 0; int min=prices.front(); // 当前最小值 int max=prices.front(); //当前最大值 int maxP=0; //最大profit for(int i=1;i<prices.size();i++){ if(prices[i]>max){ //当前值大于max maxP=prices[i]-min; max=prices[i]; }else if(prices[i]<min){ // 当前值比min小,那么更新min min=prices[i]; }else{ if(prices[i]-min>maxP){ // 当前值介于min~max之间 maxP=prices[i]-min; max=prices[i]; } } } return maxP; } };
作者:Double_Win