leetcode中贪心算法
时间: 2023-08-26 09:11:26 浏览: 160
贪心算法是一种常用的算法思想,常用于求解优化问题。在LeetCode上,有许多使用贪心算法解决的问题。
其中一道经典的贪心算法题目是"Jump Game"(跳跃游戏)。题目要求判断能否从数组的第一个元素跳到最后一个元素,每个元素的值代表可以向后跳跃的最大步数。
解决这个问题的贪心策略是,从数组的第一个位置开始遍历,维护一个变量maxJump表示当前能够到达的最远位置。在遍历过程中,不断更新maxJump,直到无法继续前进或达到数组末尾。如果最终maxJump能够到达或超过数组末尾,说明可以成功跳跃到最后一个位置。
另一道经典的贪心算法题目是"Gas Station"(加油站问题)。题目给出一个环形路线上的加油站数组,每个加油站提供的汽油量和到下一个加油站的距离。要求找到一个起点,使得从该起点出发能够绕行一圈回到起点,并且期间汽油量始终非负。
解决这个问题的贪心策略是,从某个加油站开始遍历,维护一个变量totalGas表示当前累积的汽油量。如果totalGas小于0,则表示无法从当前加油站出发,选择下一个加油站作为新的起点。通过遍历整个加油站数组,最终找到一个起点使得totalGas非负。
以上是两个贪心算法在LeetCode上的应用示例,希望能对你理解贪心算法有所帮助。
相关问题
贪心算法leetcode
以下是贪心算法在LeetCode上的应用示例:
题目:买卖股票的最佳时机含手续费
描述:给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每次交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。
示例:
输入: prices = [1, 3, 2, 8, 4, 9], fee = 2
输出: 8
解释: 能够达到的最大利润:
在此处买入 prices = 1
在此处卖出 prices = 8
在此处买入 prices = 4
在此处卖出 prices = 9
总利润: ((8 - 1) - 2) + ((9 - 4) - 2) = 8.
代码实现(Python):
```python
class Solution:
def maxProfit(self, prices: List[int], fee: int) -> int:
if not prices:
return 0
n = len(prices)
buy, sell = -prices[0], 0
for i in range(1, n):
buy = max(buy, sell - prices[i])
sell = max(sell, buy + prices[i] - fee)
return sell
```
leetcode常用算法
LeetCode是一个非常受欢迎的在线编程平台,提供了大量的算法题目,涵盖了各种难度级别和题型。下面是一些常用的LeetCode算法:
1. 两数之和(Two Sum):给定一个整数数组和一个目标值,找出数组中和为目标值的两个数的索引。
2. 反转字符串(Reverse String):反转给定字符串中的字符顺序。
3. 最长公共前缀(Longest Common Prefix):找出一组字符串中最长的公共前缀。
4. 合并两个有序链表(Merge Two Sorted Lists):将两个有序链表合并为一个新的有序链表。
5. 有效的括号(Valid Parentheses):判断给定的字符串中的括号是否有效。
6. 盛最多水的容器(Container With Most Water):给定一组非负整数,表示一组垂直线在x轴上的坐标,找出两条线与x轴组成的容器可以容纳的最大水量。
7. 三数之和(3Sum):给定一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c,使得a + b + c = 0。
8. 最长回文子串(Longest Palindromic Substring):找出给定字符串中的最长回文子串。
9. 二叉树的最大深度(Maximum Depth of Binary Tree):计算二叉树的最大深度,即从根节点到最远叶子节点的最长路径上的节点数。
10. 两个排序数组的中位数(Median of Two Sorted Arrays):给定两个大小为m和n的有序数组,找出这两个数组合并后的中位数。
以上只是LeetCode中的一小部分常用算法题目,LeetCode还有很多其他类型的题目,包括动态规划、回溯、贪心算法等等。如果你有具体的算法问题或者需要更多的题目推荐,请告诉我。