码迷,mamicode.com
首页 > 编程语言 > 详细

Leetcode 123. Best Time to Buy and Sell Stock III JAVA语言

时间:2017-03-27 19:59:25      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:买入卖出问题

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).

Subscribe to see which companies asked this question.

题意:股票的买入卖出。你只有两次机会买入卖出。

public class Solution {
    public int maxProfit(int[] prices) {
        if(prices==null || prices.length<2)return 0;
        //O(n^2)哎
        int sum=0;
        for(int i=1;i<prices.length;i++){
            int temp=getMax(prices,0,i)+getMax(prices,i+1,prices.length-1);
            if(temp>sum)sum=temp;
        }
        return sum;
    }
    public static int getMax(int[] prices,int left,int right){
        if(left>=prices.length)return 0;
        int Min=prices[left];
        int sum=0;
        for(int i=left+1;i<=right;i++){
            Min=Math.min(Min,prices[i]);
            sum=Math.max(sum,prices[i]-Min);
        }
        System.out.println(sum);
        return sum;
    // }
    // //first[i]从左往右遍历,表示到第i天时卖出能赚到的最大钱
    // int[] first=new int[prices.length];
    // //second[i]从右往左遍历,表示从第i天到最后一天能赚到的最大钱。本质还是分两部分计算。只不过是分开两次扫描数组
    // int[] second=new int[prices.length];
    // int min=prices[0];
    // for(int i=1;i<prices.length;i++){
    //     min=Math.min(min,prices[i]);
    //     first[i]=Math.max(first[i-1],prices[i]-min);
    // }
    // // for(int i=0;i<prices.length;i++){
    // //     System.out.println(first[i]);
    // // }
    // int max=prices[prices.length-1];
    // for(int i=prices.length-2;i>=0;i--){
    //     max=Math.max(max,prices[i]);
    //     second[i]=Math.max(second[i+1],max-prices[i]);
    // }
    // int ret=0;
    // for(int i=0;i<prices.length;i++){
    //     //System.out.println(second[i]);
    //     ret=Math.max(first[i]+second[i],ret);
    // }
    
    // return ret;
}
}

PS:解法一是直接以第i天为界,求两边的最大收益。但是需要O(N^2)。

优化:用俩数组,遍历两次。

Leetcode 123. Best Time to Buy and Sell Stock III JAVA语言

标签:买入卖出问题

原文地址:http://fulin0532.blog.51cto.com/6233825/1910811

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