Leetcode 贪心(greedy)
文章平均质量分 60
Leetcode 贪心算法题目
努利!奋斗!
这个作者很懒,什么都没留下…
展开
-
Leetcode 2279. Maximum Bags With Full Capacity of Rocks
题目解法:贪心将袋子的剩余空间从小到大的排序,greedy的填满袋子即可class Solution {public: int maximumBags(vector<int>& capacity, vector<int>& rocks, int additionalRocks) { int n = capacity.size(); vector<int> remain(n,0); for(原创 2022-05-23 08:32:02 · 272 阅读 · 0 评论 -
Leetcode 630. Course Schedule III
题目解法:greedy+heap总体思路是优先greedy的选择结束时间早的课程来进行完成,这样能保证完成最多的课程将所有课程按照结束时间来排序遍历每一节课,假设上了这节课,如果加完当前这节课发现不满足当前的end时间,那么就从选的课里面去掉一节时间最长的课程,最长的课程有可能是现在这节课,也有可能是之前的课程,这样就能时间重新满足条件,这个时候就是对于遍历到现在的课程的最优解。同时因为会移除时间最长的那节课,就保证了之后的课程会有更多的时间注意:python的heapq默认是小根堆,需要改变原创 2022-05-19 09:39:58 · 225 阅读 · 0 评论 -
Leetcode 2224. Minimum Number of Operations to Convert Time
题目解法:greedy把时间转化为分钟计算出time difference从60开始从大到小依次计算每个increase可以最多取多少步class Solution: def convertTime(self, current: str, correct: str) -> int: curr_h,curr_m = int(current.split(':')[0]),int(current.split(':')[1]) unix_curr = c原创 2022-04-23 09:16:58 · 118 阅读 · 0 评论 -
Leetcode 2233. Maximum Product After K Increments
题目解法1首先理解一下题意,要求的是对数组中某些数字增加1后的最大乘积,一共可增加k次。对于每一次增加1,整个乘积的变化是除了被增加这个数字以外的数字总和。那么最后乘积最大也就是k次增加的最多。从贪心的思想来看,保证每次增加都是最大即可,而每次增加要最大,也就是被增加的数字是所有数字中最小的即可。自然而然地想到用min heap来保证能够快速找到最小的数字note:这道题目有个点很有意思,如果这个mod放在最后进行,那么会TLE,只有放在while循环内部才能过,理论上时间复杂度是一模一样的cl原创 2022-04-11 12:52:59 · 943 阅读 · 0 评论 -
Leetcode 55. Jump Game
题目解法1:dfs+memorization (TLE)照例来讲这种解法应该是o(n)的但是不知道为啥会超时,莫非是我时间复杂度估计得不对?class Solution: def canJump(self, nums: List[int]) -> bool: def dfs(curr_pos,n): if curr_pos >= n: return False # check if w原创 2022-01-27 11:24:38 · 297 阅读 · 0 评论 -
【Leetcode 1288. Remove Covered Intervals】
题目解法把interval按照第一个元素生序第二个元素降序进行排序,逐个比较即可class Solution: def removeCoveredIntervals(self, intervals: List[List[int]]) -> int: intervals.sort(key = lambda x:(x[0],-x[1])) # print(intervals) prev_end = intervals[0][1]原创 2022-01-11 12:25:57 · 108 阅读 · 0 评论 -
Leetcode 1029. Two City Scheduling
题目解法解法1:贪心利用a-b的差值从小到大排序,前n个人去a,剩下的去b,利用的贪心思想。但是这个解法细想并没有非常令人信服的解释,起码我不能完全说服自己为什么这么做是对的class Solution: def twoCitySchedCost(self, costs: List[List[int]]) -> int: diff = [] n = len(costs) for i in range(n): di原创 2022-01-08 11:06:51 · 250 阅读 · 0 评论 -
Leetcode 621. Task Scheduler (cpp)
题目解法这题关键在于计算所需要添加的idle time,而这个idle time由出现最多次的task决定。不过证明就有点麻烦了,可以看这边:https://leetcode.com/problems/task-scheduler/discuss/824421/A-math-proofclass Solution {public: int leastInterval(vector<char>& tasks, int n) { vector<int&原创 2021-01-21 02:21:20 · 236 阅读 · 1 评论 -
Leetcode 56. Merge Intervals (python+cpp)
题目解法pythonclass Solution: def merge(self, intervals: List[List[int]]) -> List[List[int]]: # check empty case if not intervals: return [] intervals.sort(key=lambda x:x[0]) # initialize the start ans end原创 2020-12-19 10:37:06 · 178 阅读 · 1 评论 -
Leetcode 1673. Find the Most Competitive Subsequence (python)
题目解法:贪心加栈class Solution: def mostCompetitive(self, nums: List[int], k: int) -> List[int]: stack = [] n = len(nums) for i,num in enumerate(nums): while stack and stack[-1]>num and (n-i)+len(stack)>k:原创 2020-12-06 08:41:20 · 252 阅读 · 0 评论 -
Leetcode 1405. Longest Happy String (python)
题目解法贪心思想。每次取个数最多的来加,同时判断前两个是否相同。利用最大堆保持顺序。class Solution: def longestDiverseString(self, a: int, b: int, c: int) -> str: # main idea: use a greedy approach. Every time, try to take one char from the category with the maximum count. And u原创 2020-12-01 10:35:19 · 321 阅读 · 0 评论 -
Leetcode 1488. Avoid Flood in The City(python)
题目解法:贪心总体思想是把0的位置储存下来。每当遇到已经满的湖泊,查看两个问题:1)是否能够干燥他 2)能干燥他的符合条件的最早位置不能干燥有两种情况,一种是现在就没有保存好的0,第二种是,保存好的0出现在这个湖泊之前被下雨满的时间之前。能干燥的情况,我们遵循贪心思想,找到最早的符合条件的干燥日。也就是之前湖泊下满之后出现的第一个0,这边用二分搜索找到这个位置。bisect.bisect_right(array, index)返回array中从左往右第一个比index大的位置class Sol原创 2020-11-12 09:35:28 · 443 阅读 · 0 评论 -
Leetcode 1536. Minimum Swaps to Arrange a Binary Grid (python)
题目解法:将2D问题转化为1D,然后贪心的移动class Solution: def minSwaps(self, grid: List[List[int]]) -> int: n = len(grid) # take this as a 1-d problem,count the continues 0 from the end in every row. What we need to do is to put the rows at the cor原创 2020-11-03 08:57:11 · 776 阅读 · 0 评论 -
Leetcode 1546. Maximum Number of Non-Overlapping Subarrays With Sum Equals Target (python)
题目解法:prefix+hashmap+greedy参考leetcode给的两条hint:Keep track of prefix sums to quickly look up what subarray that sums “target” can be formed at each step of scanning the input array.It can be proved that greedily forming valid subarrays as soon as one is原创 2020-11-02 06:30:20 · 253 阅读 · 0 评论 -
Leetcode 1631 Path With Minimum Effort (python)
Leetcode Path With Minimum Effort题目解析follow up题目解析这个题目再Leetcode 的problems里面还没有,只出现在Weekly contest 212的第3题一开始觉得这个题目是个DP,觉得两遍dp可以做,实际上思路错了,两个方向的dp是不行的。基本上看到四个方向可走的题目就是用最短路径问题来做,最短路径这边也提供两种做法,一种是Bellman ford,另一种是Dijkstra,关于两种做法的详细解释看这题 Leetcode The Ma原创 2020-10-27 09:41:43 · 1116 阅读 · 0 评论 -
Leetcode 406. Queue Reconstruction by Height(python)
Leetcode 406. Queue Reconstruction by Height题目解法:sorting+贪心题目Suppose you have a random list of people standing in a queue. Each person is described by a pair of integers (h, k), where h is the heigh...原创 2020-01-05 05:58:05 · 199 阅读 · 0 评论 -
Leetcode 763. Partition Labels (python+cpp)
Leetcode 763. Partition Labels题目解法1:转化成interval overlapping问题解法2:只记录字符结束位置题目解法1:转化成interval overlapping问题仔细观察这个问题可以发现,其实可以转化成interval的问题,采用类似435的思想来做,具体流程为:首先以字母开始位置的index作为interval的开始,结束的位置作为in...原创 2020-04-13 12:11:02 · 208 阅读 · 0 评论 -
Leetcode 452. Minimum Number of Arrows to Burst Balloons(python+cpp)
Leetcode 452. Minimum Number of Arrows to Burst Balloons题目解析python代码C++版本题目解析Leetcode官方solution这边对贪心策略有一段话挺经典这道题目跟435本质上是一样的,只不过435是让你算要去掉多少个气球,而这边是算要用多少支箭,具体流程如下:将intervals按照结尾排序将第一个interval...原创 2020-04-03 11:11:13 · 300 阅读 · 0 评论 -
Leetcode 435. Non-overlapping Intervals python+CPP
Leetcode 435. Non-overlapping Intervals题目解析:python代码C++代码题目解析:使用贪心策略,核心思想为:选择的区间的结尾应该尽可能的小,结尾越小意味着留给其他区间的空间更大。所以策略为,优先保留结尾小且不相交的区间。具体步骤为:将区间按照结尾进行从小到大排序以排序后的第一个区间作为基区间,与后一个区间比较,若相交则舍弃后一个空间,当前基区...原创 2020-04-01 10:10:37 · 274 阅读 · 0 评论 -
135. Candy python+cpp
Leetcode 135. Candy题目解析python代码C++代码题目解析这道题使用贪心策略,核心思想就是一句话:每次遍历中,只考虑一侧相邻元素的大小关系。具体流程为:将糖果数组初始化为1,进行两次遍历第一次遍历从左向右进行,如果右侧位置对应的rating值比左侧大,将candy相应右侧位置的值更新为左侧元素加1第二次遍历从右向左进行,如果左侧元素对应的rating值比右侧元...原创 2020-04-01 07:05:21 · 228 阅读 · 0 评论 -
455. Assign Cookies python+cpp
455. Assign Cookies题目解析python代码C++代码题目解析这是一道典型的最简单的贪心算法,算法总体思想是:用最找的cookie优先满足最容易吃饱的child。具体流程为:将child和cookie从小到大排序从头开始遍历child和cookie,如果当前cookie可以满足当前child,那边将当前cookie喂给当前child,cookie和child同时向后...原创 2020-04-01 01:18:40 · 231 阅读 · 0 评论