Lecode简单系列(122)

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

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

首先判断该数组是否为降序排列,若是降序排列,则返回0,若不是降序排列,则进行计算,使利润最大,并且可以多次买卖,那么就是只要后一天的价格比前一天的价格高,那么此时就抛售出去。
代码:

class Solution {
    public int maxProfit(int[] prices) {
        int a=prices.length;
        int profit=0;
        boolean ad=desc(prices,a);
        if (!ad)
            return 0;

        //不是降序,计算最大收益
        for (int i=1;iprices[i-1])
                profit+=prices[i]-prices[i-1];
        }
        return profit;
    }
    public  boolean desc(int[] a,int len) {
        for(int i=1;i0)
                return true;
        }
        return false;

    }
}

结果:
Lecode简单系列(122)_第1张图片题目总结:
在判断是否为降序的时候,一开始也是用上面的方法进行判断,但不知道怎么了,出错了,于是乎以为这种方法不能判断是否为降序,于是绞尽脑汁想到了用递归的方法来计算,啧啧啧,很不划算,测试都能通过,但是超时了。
递归代码如下:

public static boolean desc(int[] a,int len) {
        /*if (len > 2) {
            if (a[len - 1] > a[len - 2])
                return false;
            else
                return desc(a, len - 1);
        }
        else {
            if (a[0] > a[1])
                return true;
        }
       return true;*/

你可能感兴趣的:(算法练习,Java小白的成长之路)