LeetCode-Best Time to Buy and Sell Stock I&&II

第一:题意是一个数组里保存着某支股票的股价情况。第i个为第i天的价格。求最大收益。允许买卖一次

这道题就是求最大的差值。可以记录下最小的值,然后基于最小值,找出当前的最大差值。

public class Solution {
    public int maxProfit(int[] prices) {
        if(prices.length==0||prices.length==1)
        {
            return 0;
        }
        int low=prices[0],ans=0;
        for(int i=1;i<prices.length;i++)
        {
            if(low>prices[i]) low=prices[i];    //记录最小值
            else
            {
                if(prices[i]-low>ans)
                {
                    ans = prices[i]-low;
                }
            }
        }
        return ans;
    }
}

第二:题意在第一题的基础上允许多次买卖。但是必须先买再卖,不能连续买或者连续卖。

这道题就是求所有差值相加。可以想象将股价想象为一个折线统计图。将所有上升的段的差值相加即为结果。

public class Solution {
    public int maxProfit(int[] prices) {
        if(prices.length==0||prices.length==1)
        {
            return 0;
        }
        int low = prices[0];
        int high = 0;
        int sum = 0;
        for(int i = 1;i<prices.length;i++)
        {
            if(low>prices[i])   //若当前股价低于最低值,进行低吸
            {
                low=prices[i];
            }
            else
            {
                if((i<prices.length-1)&&(prices[i+1]>prices[i]))  //若后面的值比当前值还大(还处于上升阶段)
                {
                    continue;
                }
                else     //若当前为一个顶峰点,则卖出股票
                {
                    sum = sum+prices[i]-low;    
                    low = prices[i];
                }
                
            }
        }
        return sum;
    }
}
原文地址:https://www.cnblogs.com/ren-jie/p/5267359.html