贪心算法
leetcode贪心算法
why_1513
求实求真,大气大气
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
最长递增子序列-力扣
上述动态规划的解法,其时间复杂度为O(N * N),力扣进阶所要求的时间复杂度为O(NlogN),需要使用贪心的思想来进行实现。,用 len 记录目前最长上升子序列的长度,起始时 len 为 1,d[1]=nums[0];利用贪心的思想维护一个单调递增数组。原创 2024-06-30 14:41:45 · 464 阅读 · 0 评论 -
买卖股票的最佳时机-力扣
因为股票就买卖一次,那么贪心的想法就是取最左最小值,取最右最大值,那么得到的差值就是最大利润。原创 2024-06-27 19:52:48 · 269 阅读 · 0 评论 -
监控二叉树-力扣
但是很快就发现问题,这样做是存在漏洞的,左右子树中只要存在一个false,那么就说明需要在这个父节点设立一个监控,但如果此时有一个子节点已经设立了监控,那么此时的判断便会增加额外的节点。一开始将递归函数的返回值定为 bool 类型,遇到叶子节点就返回false,当左右子节点的返回值都为 false时,说明需要在此处设立一个监控,然后返回 true;因此,单纯覆盖/没覆盖 两种状态是无法满足判断的,需要增加第三种状态 监控,在左右节点有一个没被覆盖时,就设立监控,并返回覆盖。原创 2024-06-21 11:27:00 · 184 阅读 · 0 评论 -
单调递增的数列-力扣
本题由于要对数字的每一位进行处理,于是想到首先将 int 类型 转化为 string,这样对每一位处理会更加方便。原创 2024-06-20 22:38:45 · 252 阅读 · 0 评论 -
合并区间-力扣
由于每次都是在新的区间出现时,才将前一个重叠区间的合并结果添加到 result,所以当遍历到最后一个区间时,没有新的区间出现了,需要单独处理,将此时的 left, right也添加到result中。本题同样是去寻找重叠的区间,不过需要将重叠的区间进行合并,那么就需要记录重叠区间的开始和结束,当出现 新的 区间开始 大于 重叠区间结束时,说明可以对前方的重叠区间进行合并。原创 2024-06-20 22:01:04 · 164 阅读 · 0 评论 -
划分字母区间-力扣
首先遍历字符串,记录每个字符出现的最后位置,然后重新遍历字符串,并不断更新有边界,当有边界等于 j 时,说明此时 j 前的字符在后面都不会在出现,在此处进行一次切割。原创 2024-06-20 21:34:06 · 166 阅读 · 0 评论 -
无重叠区间-力扣
本题与 用最少数量的箭引爆气球 类似,都是去求重叠的区间。原创 2024-06-20 21:45:16 · 108 阅读 · 0 评论 -
用最少数量的箭引爆气球-力扣
本题利用贪心的思想,优先去射重叠最多的气球,就能够使用最少数量的箭。首先对数组进行排序,根据横坐标的大小进行升序排序,那么从最左侧开始遍历,使用right来标记 当前重叠气球的最小右边界,当有新的气球,左边界超过这个最小右边界,就说明需要新的箭来射击。原创 2024-06-20 19:56:57 · 208 阅读 · 0 评论 -
根据身高重建队列-力扣
本题与分发糖果一样存在两个权重需要去协调,h 和 k;首先将数组根据 h 从大到小排列,此时,依次加入数组,则身高较高的在数组的最前方,那么只需将每个人插入到对应的 k 位置,自然满足 前面有k 个人身高大于等于 h。原创 2024-06-20 17:59:22 · 230 阅读 · 0 评论 -
分发糖果-力扣
这样从局部最优推出了全局最优,即:相邻的孩子中,评分高的孩子获得更多的糖果。一次是从左到右遍历,只比较右边孩子评分比左边大的情况。一次是从右到左遍历,只比较左边孩子评分比右边大的情况。如果在考虑局部的时候想两边兼顾,就会顾此失彼。原创 2024-06-20 16:45:45 · 293 阅读 · 0 评论 -
柠檬水找零-力扣
10美元只能用5美元找零,但20美元可以使用10美元5美元找零,也可以使用三张5美元找零。应当优先使用10美元+5美元来为20美元找零。原创 2024-06-19 22:33:09 · 171 阅读 · 0 评论 -
加油站-力扣
i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum。那么局部最优:当前累加rest[i]的和curSum一旦小于0,起始位置至少要是i+1,因为从i之前开始一定不行。一开始想着使用暴力解法,遍历每个加油站,然后以每个加油站为起点跑一圈,最终找到节点,但是这样写在测试一个很长的案例是,超时了,不得不想其他方法去做。原创 2024-06-19 22:20:16 · 261 阅读 · 0 评论 -
K次取反后最大化的数组和-力扣
求和时,对第二次排序后的 nums[0]元素进行单独判断,根据k取余的不同结果取不同值。代码随想录中第一次排序根据数组中元素绝对值大小排序,从而较少了一次sort排序。原创 2024-06-19 21:12:44 · 233 阅读 · 0 评论 -
跳跃游戏Ⅱ-力扣
在 跳跃游戏 中,通过不断扩大能够跳跃到的右边界,从而判断能否到达下标。那么只要更新一次有边界,就说明需要跳一次,直到现在的右边界包含了 最后一个下标。那么只需要统计有边界更新的次数,便是需要跳的次数。这道题与 跳跃游戏 相比,增加了跳跃的次数,但也保证了一定能够到达最后一个下标。原创 2024-06-19 20:34:46 · 171 阅读 · 0 评论 -
跳跃游戏-力扣
本题一开始想的解法是,如果 nums[ i + nums[i] ]!= 0,那么就跳到这个位置,否则就向右一步,如果 i + nums[i] >= nums.size(),那么就说明能够到达最后一个下标。但这样跳可能会错过两个下标之间,存在较大跳数的可能,应当将每一步 跳的最大范围 作为遍历的界限,并不断扩充这个右边界,当有边界覆盖最有一个下标时,说明 能够抵达。原创 2024-06-19 16:51:15 · 141 阅读 · 0 评论 -
买卖股票的最佳时机Ⅱ-力扣
本题需要求的是最大的利润,本题中理解利润拆分是关键点!不要整块的去看,而是把整体利润拆为每天的利润。一旦想到这里了,很自然就会想到贪心了,即:只收集每天的正利润,最后稳稳的就是最大利润了。原创 2024-06-19 11:58:35 · 195 阅读 · 0 评论 -
最大子序和-力扣
这道题目一开始在想遇到负数就从下一个正数开始计算,并和记录的最大和相比,但有些子序列,即使子序列中存在负数,但整体的和还是最大的,不能单纯的跳过。原创 2024-06-18 22:06:00 · 258 阅读 · 0 评论 -
摆动序列-力扣
本题一开始想到的解法是,利用i j k三个指针,来标记数组的三个元素,比较差值是否相乘小于0,如果是则结果 + 1;当不满足时,则将k向前一步,i j不动,继续比较,但写着写着发现问题,当 k 跳过了某个位置,i j该怎样同步跳过这个位置呢。后来想到本题只求最大摆动序列的个数,而不要求返回数组,那么无需记录下标,只需记录前一个差,现在的差两个差值即可。默认数组尾节点满足摆动序列,对前n-1个节点进行求解。如果符合条件,就更新pre的值。原创 2024-06-18 21:34:27 · 208 阅读 · 0 评论 -
分发饼干-力扣
对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j]。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。本题想到的解题思路是,首先将胃口和饼干进行排序,优先使用小饼干来满足小胃口,直到饼干耗尽或者满足全部孩子胃口。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。原创 2024-06-18 20:31:59 · 204 阅读 · 0 评论
分享