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

来源:互联网 发布:php cookie 保存数组 编辑:程序博客网 时间:2024/04/27 23:04

LintCode--best-time-to-buy-and-sell-stock(买卖股票的最佳时机)

原题链接:http://www.lintcode.com/zh-cn/problem/best-time-to-buy-and-sell-stock/


假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格。如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润。

样例

给出一个数组样例 [3,2,3,1,2], 返回 1 


分析:

新建一个新的数组记录每天的涨幅,顺理成章转化为最大子序列和。

时间复杂度  O(n)


代码(C++、Python、Java):

class Solution {public:    /**     * @param prices: Given an integer array     * @return: Maximum profit     */    int maxProfit(vector<int> &prices) {        // write your code here        int n = prices.size();        if (n <= 1) return 0;        vector<int> trans;        for (int i = 1; i <= n; i++)            trans.push_back(prices[i] - prices[i-1]);        int imax = 0, res = 0;        for(int i = 0; i < n-1; i++){            imax += trans[i];            if (imax > res) res = imax;            else if(imax < 0) imax = 0;        }        return res;    }};

class Solution:    """    @param prices: Given an integer array    @return: Maximum profit    """    def maxProfit(self, prices):        # write your code here        n = len(prices)        if n <= 1:            return 0        trans = [0 for i in range(n-1)]        for i in range(n-1):            trans[i] = prices[i+1] - prices[i]        imax = 0        res = 0        for i in range(n-1):            imax += trans[i]            if imax > res:                res = imax            elif imax < 0:                imax = 0        return res

public class Solution {    /**     * @param prices: Given an integer array     * @return: Maximum profit     */    public int maxProfit(int[] prices) {        // write your code here        int n = prices.length;        if (n <= 1) return 0;        int []trans = new int [n-1];        for (int i = 0; i < n-1; i++)            trans[i] = prices[i+1] - prices[i];        int imax = 0, res = 0;        for (int i = 0; i < n-1; i++){            imax += trans[i];            if (imax > res) res = imax;            else if (imax < 0) imax = 0;        }        return res;    }}


0 0