代码随想录算法训练营之JAVA|第二十八天|122. 买卖股票的最佳时机 II

今天是第28天刷leetcode,立个flag,打卡60天。

算法挑战链接

122. 买卖股票的最佳时机 IIhttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/

第一想法

题目理解:找到一个升序的段,然后累加每一个升序的段头尾的差值。

题目比较简单,大概要完成的事情就是:找到一个升序段,保存头和尾,计算差值。

怎么找到升序的段呢?方法也是很简单的。

将数组的第一个赋值给头和尾,然后遍历数组。

        如果当前值 小于 尾,计算差值,并且将当前值赋值给 头

        将当前值赋值给 尾

循环结束之后需要判断一下最后一次是否需要卖出。

代码如下:

class Solution {
    public int maxProfit(int[] prices) {
        if (prices.length==0 || prices.length == 1) {
            return 0;
        }
        int result = 0;
        int start = prices[0];
        int end = prices[0];
        for (int i = 1; i < prices.length; i++) {
            if (prices[i] < end) {
                result += end - start;
                start = prices[i];
            }
            end = prices[i];
        }
        if (start < end) {
            result += end - start;
        }
        return result;
    }
}

看完代码随想录之后的想法 

贪心算法的写法,先贴代码:

// 贪心思路
class Solution {
    public int maxProfit(int[] prices) {
        int result = 0;
        for (int i = 1; i < prices.length; i++) {
            result += Math.max(prices[i] - prices[i - 1], 0);
        }
        return result;
    }
}

 大概的思路就是,如果当前值小于前一个值,那么就计算值。

简单粗暴!!!!!

今日收获

贪心算法的核心:以局部最优达到全局最优

你可能感兴趣的:(算法,java,开发语言)