LeetCode 热题100 贪心算法专题解析

LeetCode 热题100 贪心算法专题解析

贪心算法是一种在每一步选择中都采取当前状态下最优(或看似最优)的选择,从而希望导致全局最优解的算法。在 LeetCode 热题100 中,贪心算法应用于股票交易、跳跃游戏等问题。

1. 买卖股票的最佳时机

题目描述 :给定一个数组,其中包含 n 个非负整数,表示股票的每天价格,找出买卖股票的最佳时机。
解题思路:使用贪心算法。记录最小价格,然后计算每个价格与最小价格的差值,找出最大的差值。

2. 跳跃游戏

题目描述 :给定一个整数数组,跳过数组中的某些元素,跳到下一个最大元素。
解题思路:使用贪心算法。从数组的第一个元素开始,跳到下一个最大元素。

3. 跳跃游戏 II

题目描述 :同上,但每次跳跃可以跳到数组末尾。
解题思路:使用贪心算法。计算当前可以跳到的最远位置,然后更新这个最远位置。

4. 划分字母区间

题目描述 :给定一个字符串 s,将字符串中的所有字母划分到 k 个非空的字母区间中,使得每个区间的字符都只包含一种字母。
解题思路 :

这个问题可以通过回溯算法来解决。我们可以从字符串的第一个字符开始,为每个字符分配一个区间。如果当前字符与上一个字符不同,我们需要为当前字符创建一个新的区间。如果当前字符与上一个字符相同,我们可以继续使用上一个字符的区间。在这个过程中,我们需要确保每个区间的字符数量不超过 k。

我们可以使用一个辅助函数来帮助我们实现这个过程。辅助函数将接收当前索引、上一个字符的区间编号、当前字符以及剩余区间数量作为参数。如果当前字符与上一个字符不同,我们需要为当前字符创建一个新的区间,并更新剩余区间数量。如果当前字符与上一个字符相同,我们可以继续使用上一个字符的区间。

在回溯算法的每一步中,我们需要检查是否所有的字符都被分配到了区间中。如果所有的字符都被分配到了区间中,我们找到了一个有效的解,并将其返回。如果当前字符无法被分配到一个有效的区间中,我们需要回溯到上一个步骤,并尝试其他可能的区间分配方式。

通过这种方式,我们可以找到将字符串 s 中的所有字母划分到 k 个非空字母区间中的所有可能方案。

相关推荐
海绵宝宝转agent28 分钟前
leetCode100算法开源笔记分享
笔记·算法
写后端的胖头鱼1 小时前
时间复杂度 & 空间复杂度
java·数据结构·算法·时间复杂度·空间复杂度
hahaha60161 小时前
黑体轨迹和色温--光源白点
人工智能·嵌入式硬件·算法·计算机视觉
海绵宝宝转agent1 小时前
基于Redis ZSet+AOP+注解实现限流注解算法
数据库·redis·算法
All for pursuit.2 小时前
【回溯-7】494.目标和
数据结构·c++·算法·leetcode
白杨尚青2 小时前
C++入门篇(十三):vector(上)——动态数组:构造、空间增长与迭代器失效
开发语言·c++·笔记·算法·stl
Jasmine_llq2 小时前
《P17461 [GESP202609 八级] 生成树计数》
算法·栈·tarjan 算法·边双连通分量·深度优先搜索 dfs·tarjan 保存当前路径节点·模乘法
Jasmine_llq2 小时前
《P17462 [GESP202609 八级] 末班车》
算法·dijkstra 算法·最大化版本,求最长可行值·建反向图(逆图 / 反转边)·多源 dijkstra 思想·对每个终点单独跑一遍djst·离线预处理 + 在线查询
Logic1012 小时前
C语言/数据结构贪心算法题解:字符串趋同——逐位统计最高频率求最小修改代价
c语言·数据结构·贪心算法·字符串·时间复杂度·频率统计·算法题
the3clipse3 小时前
H.265熵编码核心:CABAC自适应二进制算术编码详解——如何将语法元素高效压缩为比特流
人工智能·算法·视频编码·h.265·hevc·cabac·cavlc