![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
贪心
Vaccy Zhu
自律是解决人生问题最主要的工具,也是解决人生痛苦最重要的方法!
展开
-
买卖股票的最佳时机-动态规划121-C++&python
暴力法:没看答案class Solution {public: int maxProfit(vector<int>& prices) { int res = 0; int size = prices.size(); for(int i = 0; i < size; i++){ for(int j = i + 1; j < size; j++){ int a原创 2021-03-23 10:58:55 · 102 阅读 · 0 评论 -
监控二叉树-贪心968-python
无转载 2022-06-29 19:37:28 · 106 阅读 · 0 评论 -
分割平衡字符串-贪心1221-python
没看答案,用两个变量need_R和need_L记录需要的R和L,当两者相等时即为一个平衡字符串,res+=1,两个变量归零。class Solution: def balancedStringSplit(self, s: str) -> int: need_R = need_L = 0 res = 0 for ch in s: if ch == 'R': need_L += 1原创 2022-05-06 15:43:32 · 448 阅读 · 0 评论 -
Dota2参议院-贪心649-python
没看答案,贪心思想。class Solution: def predictPartyVictory(self, senate: str) -> str: ''' 贪心思想胜利策略:优先ban后面出现的敌对方,如果后面没有敌对方,ban前面出现的敌对方,直到胜利。 ''' sen = list(senate) while True: num_R = num_D = 0 # 当前剩余的R o原创 2022-05-06 15:14:58 · 457 阅读 · 0 评论 -
加油站-贪心134-python
class Solution: def canCompleteCircuit(self, gas, cost): # 如果总加油量小于总耗油量,那一定无法行驶一周 # 反之则一定可以行驶一周 if sum(gas) < sum(cost): return -1 ''' 算法思路:如果x到不了y+1(但能到y),那么从x到y的任一点出发都不可能到达y+1。 因原创 2022-03-16 17:21:54 · 1342 阅读 · 0 评论 -
划分字母区间-贪心763-python&c++
答案解析from collections import defaultdictclass Solution: def partitionLabels(self, s: str) -> List[int]: end_pos = defaultdict(int) start, end = 0, 0 res = [] # 记录每个字母的最后出现位置 for i, ch1 in enumerate(s):原创 2022-03-15 10:37:11 · 412 阅读 · 0 评论 -
用最少数量的箭引爆气球-贪心452-python
没看答案,和重叠区间问题类似,只不过按照题意,区间首尾相接也算重叠。class Solution: def findMinArrowShots(self, points: List[List[int]]) -> int: points = sorted(points, key=lambda x:[x[1], x[0]]) count = 1 end = points[0][1] for balloon in points:原创 2022-03-14 09:44:20 · 590 阅读 · 0 评论 -
跳跃游戏II-贪心45-python&c++
答案解析class Solution: def jump(self, nums: List[int]) -> int: n = len(nums) res, furthest = 0, 0 end = 0 for i in range(n-1): furthest = max(i + nums[i], furthest) if i == end:原创 2022-03-11 12:32:47 · 88 阅读 · 0 评论 -
跳跃游戏-贪心55-python&c++
答案解析class Solution: def canJump(self, nums: List[int]) -> bool: furthest, n = 0, len(nums) for i in range(n): if i <= furthest: furthest = max(i+nums[i], furthest) if furthest >= n-1:原创 2022-03-10 14:51:02 · 134 阅读 · 0 评论 -
根据身高重建队列-贪心406-python
没看答案,遍历people中的每个人,每个人都按他们的要求排好队。class Solution: def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]: # 按题意的ki从低到高排,ki相同的再按身高hi从高到低排 # 这样排序是为了方便后续的插入算法 people = sorted(people, key=lambda x:(x[1],-x[0]))原创 2022-03-10 10:50:27 · 779 阅读 · 0 评论 -
分发糖果-贪心135-python
答案解析class Solution: def candy(self, ratings: List[int]) -> int: n = len(ratings) res = 1 inc, dec = 1, 0 preNum = 1 for i in range(1, n): if ratings[i] >= ratings[i-1]:转载 2022-03-09 22:33:27 · 285 阅读 · 0 评论 -
单调递增的数字-贪心738-python
没看答案。class Solution: def monotoneIncreasingDigits(self, n: int) -> int: def check(num): # 从高位到低位提取num的每一位数字 ls = [] while num != 0: ls.append(num%10) num = num // 10原创 2022-03-09 17:51:26 · 691 阅读 · 0 评论 -
摆动序列-贪心376-python
没看答案,时间复杂度O(n),空间复杂度O(1),但实现过于复杂不推荐。class Solution: def wiggleMaxLength(self, nums: List[int]) -> int: res = n = len(nums) if n == 1: return res i, j = 0, 1 if nums[1]-nums[0] > 0: pre = 1原创 2022-03-08 18:08:33 · 579 阅读 · 0 评论 -
柠檬水找零-贪心860-python
没看答案,直接按题意分情况讨论即可。from collections import defaultdictclass Solution: def lemonadeChange(self, bills: List[int]) -> bool: cash = defaultdict(int) for csh in bills: cash[csh] += 1 if csh == 10:原创 2022-03-08 10:29:36 · 427 阅读 · 0 评论 -
K次取反后最大化的数组和-贪心1005-python
没看答案:每次取反前要先排序,是因为取反最小的数字是局部最优解,取反次数用完后极为全局最优解。当数组只有0和正数时,可以无视次数,因为可以重复取反0。class Solution: def largestSumAfterKNegations(self, nums: List[int], k: int) -> int: for i in range(k): nums = sorted(nums) if nums[0] == 0:原创 2022-03-07 11:10:11 · 259 阅读 · 0 评论 -
分发饼干-贪心455-python
没看答案,利用贪心思想:从大尺寸饼干开始分发,优先满足大胃口的孩子。class Solution: def findContentChildren(self, g: List[int], s: List[int]) -> int: res = 0 g, s = sorted(g), sorted(s) i, j = len(g)-1, len(s)-1 while i >= 0 and j >= 0:原创 2022-03-07 10:27:50 · 534 阅读 · 0 评论 -
无重叠区间-贪心435-python
贪心算法可以认为是动态规划算法的一个特例,相比动态规划,使用贪心算法需要满足更多的条件(贪心选择性质),但是效率比动态规划要高。什么是贪心选择性质呢,简单说就是:每一步都做出一个局部最优的选择,最终的结果就是全局最优。注意哦,这是一种特殊性质,其实只有一小部分问题拥有这个性质。pythonclass Solution: def eraseOverlapIntervals(self, intervals: List[List[int]]): intervals = sorte.原创 2021-08-10 20:19:19 · 145 阅读 · 0 评论