算法随想录第三十二天打卡|122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

 122.买卖股票的最佳时机II  

本题解法很巧妙,大家可以看题思考一下,在看题解。 

代码随想录

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        result=0
        for i in range(len(prices)-1):
            if prices[i+1]-prices[i]>0:
               result+=prices[i+1]-prices[i]
        return result 

总结

我考虑了很多的情况,结果都满足不了怎么买入才最好。看了答案就恍然大悟了,把买入卖出可以分成多个买入和卖出,其实就相当于同一天的买入和卖出,其实和结果是一样的,求差值然后只找差值为正的情况是贪心算法。说实话这考虑最好的情况有时就要猜。

 55. 跳跃游戏 

本题如果没接触过,很难想到,所以不要自己憋时间太久,读题思考一会,没思路立刻看题解 

代码随想录

class Solution:
    def canJump(self, nums: List[int]) -> bool:
        max_nums=0  #这个表示当前可以达到的最大范围
        if len(nums)==1:
            return True
        i=0
        while i<=max_nums:
            max_nums=max(i+nums[i],max_nums)
            
            if max_nums>=len(nums)-1:
                return True
            i+=1
        return False

总结

自己想不出,看答案后恍然大悟已成为我做贪心算法的必然会面临的事。不过我认为卡哥说的“没有个整体的贪心框架解决一系列问题,只能是接触各种类型的题目锻炼自己的贪心思维!”很对,这不是你的错,仅仅是没见过而已。这道题感觉跟贪心没啥关系,这种解题方法我也见过类似的,下次一定可以写出来的。

45.跳跃游戏II 

本题同样不容易想出来。贪心就是这样,有的时候 会感觉简单到离谱,有时候,难的不行,主要是不容易想到。

代码随想录

class Solution:
    def jump(self, nums: List[int]) -> int:
        result=0
        cur_=0
        next_=0
        for i in range(len(nums)-1):
            next_=max(i+nums[i],next_)
            if i==cur_:
                cur_=next_
                result+=1
        return result

总结

先找出当前的位置所能走的最大范围,再遍历当前的数找到下一个最大范围。

你可能感兴趣的:(游戏)