买卖股票的最佳时机

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

注意你不能在买入股票前卖出股票。

示例 1:

输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。


这是Leetcode中,动态规划简单的部分。我是这么想的:后一天减去前一天,如果值为负那么,肯定后一天的价格更低,那么我们就需要在更低的价格中买入,然后呢,只要后一天减前一天的价格不为负,我们一直扫描就行。这个问题类似于最大子序列和,(扫描过程中,最低点不变,我们只需替换差价即可。——可以这样想,即使是这样:2 3 3 5 2,那么我们的到的差价依旧是3)

代码:

     public int maxProfit(int[] prices) {
            int len=prices.length;
            int max=0,i=0,temp;
            for(int j=1;i<len&&j<len;) {
                temp=prices[j]-prices[i];
                if(temp<0) {
                    i=j;j++;//当寻找到一个小于i处的价格,我们直接选择新的最低点
                }
                else {
                    if(max<temp)max=temp;
                    j++;
                }
            }
            //就算是一个递减序列,最后返回max(初值为0)即可
            return max;
        }

猜你喜欢

转载自blog.csdn.net/zwzsdy/article/details/80155376