码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode -- Best Time to Buy and Sell Stock III

时间:2015-09-19 16:39:40      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

Question:

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

Design an algorithm to find the maximum profit. You may complete at most two transactions.

Note:
You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).

 

Analysis:

问题描述:给出一个整数数组,其中第i个元素表示第i天得股价。

设计一个程序找到最大利润,最多只能进行两次交易。

思路一:暴力求解方法。一次循环分成两段,每段求最大利润,然后找到最大利润,时间复杂度为O(n2).

思路二:Dynamic Programming的思想。首先正向遍历一遍,计算若是当前交易能够得到的profit;然后逆向遍历一遍(正向遍历与逆向遍历要求的东西是不一样的,正向是求当前如果进行交易的话能够得到的profit,而逆向遍历要求从i到最后能够获得的最大收益)。

 

Answer:

public class Solution {
 public static int maxProfit(int[] prices) {
            if(prices.length == 0 || prices.length == 1)
                return 0;
        
            int n = prices.length;
            
            //正向寻找最大利润
            int low = prices[0];
            int profit0 = 0;
            int [] pro = new int[n];
            pro[0] = 0;
            for(int i=1; i<n; i++) {
                if(prices[i] < low)
                    low = prices[i];
                int temp = prices[i] - low;
                if(profit0 < temp)
                    profit0 = temp;
                pro[i] = temp;
            }
            
            //逆向寻找最大利润
            int high = prices[prices.length - 1];
            int profit1 = 0;
            int[] pro1 = new int[n];
            pro1[n-1] = 0;
            for(int i=n - 2; i>=0; i--) {
                if(high < prices[i])
                    high = prices[i];
                int temp = high - prices[i];
                if(profit1 < temp) 
                    profit1 = temp;
                pro1[i] = profit1;
            }
            
            int res = 0;
            for(int i=0; i<n; i++) {
                int temp = pro[i] + pro1[i];
                //System.out.println("pro: "+pro[i]+" pro1: "+pro1[i] );
                if(res < temp)
                    res = temp;
            }
            
        return res;
    }
 
    
}

 

LeetCode -- Best Time to Buy and Sell Stock III

标签:

原文地址:http://www.cnblogs.com/little-YTMM/p/4821658.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!