【LeetCode】贪心算法--买卖股票的最佳时机 II(122)

1、写在前面面试

为何要在LeetCode刷题?你们都知道不论是校招仍是社招算法题是必考题,而这一部分恰巧是大多数人的短板,因此刷题首先是为了提升自身的编程能力,可以在算法面试中脱颖而出,拿到满意的offer。本身是打算考研的,计算机考研数据结构也是必考题,因此刷题的第二个缘由就是为了巩固本身的数据结构知识。算法

应该如何刷题呢?这两个月本身是顺序刷题的,可是总结的时候发现知识点太零散,前二十题有栈,链表,数组等等,本身总结的时候没有造成一个完整的体系,也没有清晰的分类,这不是本身想要的,因此本身后期刷题将采用专题的方式,好比数组,链表,二叉树等等。编程

那么第一个专题就是贪心算法。前20题连接【LeetCode】汇总贴(NO.1-20)数组

本身建了一个LeetCode刷题群,交流本身的刷题心得,如今尚未到达预约的人数,感兴趣的小伙伴能够参加哦,我的微信:wxb950917。微信

为面试而生,期待你的加入。
2、什么是贪心算法数据结构

贪心算法在LeetCode共有41个题目,以中等难度居多。那么什么是贪心算法呢?机器学习

贪心算法(又称贪婪算法)是指,在对问题求解时,老是作出在当前看来是最好的选择。也就是说,不从总体最优上加以考虑,他所作出的是在某种意义上的局部最优解。学习

贪心算法每一步必须知足一下条件:设计

  一、可行的:即它必须知足问题的约束。3d

  二、局部最优:他是当前步骤中全部可行选择中最佳的局部选择。

  三、不可取消:即选择一旦作出,在算法的后面步骤就不可改变了。

学习贪心算法的时候能够结合动态规划一块儿来学习,二者仍是很类似的。

3、今日题目

买卖股票的最佳时机 II(122)

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

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

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉以前的股票)。

示例 1:
输入: [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能得到利润 = 5-1 = 4 。

随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能得到利润 = 6-3 = 3 。

示例 2:
输入: [1,2,3,4,5]
输出: 4
解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能得到利润 = 5-1 = 4 。

注意你不能在第 1 天和第 2 天接连购买股票,以后再将它们卖出。
 由于这样属于同时参与了多笔交易,你必须在再次购买前出售掉以前的股票。

示例 3:
输入: [7,6,4,3,1]
输出: 0
解释: 在这种状况下, 没有交易完成, 因此最大利润为 0。

4、题目分析

贪心算法,老是作出在当前看来是最好的选择,不从总体最优上加以考虑,也就是说,只关心当前最优解,按照贪心策略,不关心之后,咱们只关心当前利益。第0天买入,花费prices[0],第一天卖出,获得prices[1],那么咱们的收获就是profit = prices[1] - prices[0],那么有两种状况

(1)当profit > 0 时,赶忙买入卖出,能赚一笔是一笔。

(2)当profit <= 0 时,再买入卖出的话,那就是傻了,亏钱。

以此方式类推下去,即得最大利润。

5、代码实现

class Solution:

def maxProfit(self, prices):
    """
    :type prices: List[int]
    :rtype: int
    """
    profit = 0
    temp=0
    for i in range(1,len(prices)):
        temp=prices[i] - prices[i-1]
        if temp>0:
            profit+=temp
    return profit

【推荐阅读】

【Python爬虫】初识爬虫(1)

用Python来一场人工造雪

机器学习实战--住房月租金预测(1)

Python之禅

相关文章
相关标签/搜索