代码随想录算法训练营第二十八天|122.买卖股票的最佳时机II,55. 跳跃游戏,45.跳跃游戏II

系列文章目录

代码随想录算法训练营第一天|数组理论基础,704. 二分查找,27. 移除元素

代码随想录算法训练营第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

代码随想录算法训练营第三天|链表理论基础,203.移除链表元素,707.设计链表,206.反转链表

代码随想录算法训练营第四天|24. 两两交换链表中的节点,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交,142.环形链表II,总结

代码随想录算法训练营第五天|哈希表理论基础,242.有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和

代码随想录算法训练营第六天|454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和,总结

代码随想录算法训练营第七天|344.反转字符串,541. 反转字符串II,卡码网:54.替换数字,151.翻转字符串里的单词,卡码网:55.右旋转字符串

代码随想录算法训练营第八天|28. 实现 strStr(),459.重复的子字符串,字符串总结,双指针回顾

代码随想录算法训练营第九天|理论基础,232.用栈实现队列,225. 用队列实现栈

代码随想录算法训练营第十天|20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

代码随想录算法训练营第十一天|239. 滑动窗口最大值,347.前 K 个高频元素,总结

代码随想录算法训练营第十二天|理论基础,递归遍历,迭代遍历,统一迭代

代码随想录算法训练营第十三天|层序遍历10,226.翻转二叉树,101.对称二叉树

代码随想录算法训练营第十四天|104.二叉树的最大深度,559.n叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数

代码随想录算法训练营第十五天|110.平衡二叉树,257. 二叉树的所有路径,404.左叶子之和

代码随想录算法训练营第十六天|513.找树左下角的值,112. 路径总和,113.路径总和ii,106.从中序与后序遍历序列构造二叉树,105.从前序与中序遍历序列构造二叉树

代码随想录算法训练营第十七天|654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树

代码随想录算法训练营第十八天|530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数,236. 二叉树的最近公共祖先

代码随想录算法训练营第十九天|235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点

代码随想录算法训练营第二十天|669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树,总结篇

代码随想录算法训练营第二十一天|回溯算法理论基础,77. 组合

代码随想录算法训练营第二十二天|216.组合总和III,17.电话号码的字母组合

代码随想录算法训练营第二十三天|39. 组合总和,40.组合总和II,131.分割回文串

代码随想录算法训练营第二十四天|93.复原IP地址,78.子集,90.子集II

代码随想录算法训练营第二十五天|491.递增子序列,46.全排列,47.全排列 II

代码随想录算法训练营第二十六天|332.重新安排行程,51. N皇后,37. 解数独,总结

代码随想录算法训练营第二十七天|贪心算法理论基础,455.分发饼干,376. 摆动序列,53. 最大子序和

文章目录

  • 系列文章目录
  • 122.买卖股票的最佳时机II
  • 55. 跳跃游戏
  • 45.跳跃游戏II

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

    题目链接: 122.买卖股票的最佳时机II

    题目内容: 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。返回 你能获得的 最大 利润 。

    视频讲解: 贪心算法也能解决股票问题!LeetCode:122.买卖股票最佳时机II

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

    55. 跳跃游戏

    题目链接: 55. 跳跃游戏

    题目内容: 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。

    视频讲解: 贪心算法,怎么跳跃不重要,关键在覆盖范围 | LeetCode:55.跳跃游戏

    class Solution:
        def canJump(self, nums: List[int]) -> bool:
            if len(nums)==1:
                return True
            cover=0
            for i in range(len(nums)):
                if i<=cover:
                    cover=max(nums[i]+i,cover)
                    if cover >= len(nums)-1:
                        return True
            return False
    

    45.跳跃游戏II

    题目链接: 45.跳跃游戏II

    题目内容: 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:0 <= j <= nums[i] , i + j < n返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。

    视频讲解: 贪心算法,最少跳几步还得看覆盖范围 | LeetCode: 45.跳跃游戏II

    class Solution:
        def jump(self, nums: List[int]) -> int:
            if len(nums)==1:
                return 0
            cur_distance=0 #当前覆盖最远距离下标
            ans=0 #记录走的步数
            next_distance=0 #下一步覆盖最远距离下标
            for i in range(len(nums)):
                next_distance=max(nums[i]+i,next_distance)
                if i==cur_distance:
                    ans+=1
                    cur_distance=next_distance
                    if next_distance>=len(nums)-1:
                        break
            return ans