![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
贪心算法
DarkFlameMaster2188
这个作者很懒,什么都没留下…
展开
-
968. 监控二叉树
left == 1 && right == 0 左节点有摄像头,右节点无覆盖。left == 0 && right == 1 左节点有无覆盖,右节点摄像头。left == 1 && right == 2 左节点有摄像头,右节点有覆盖。left == 2 && right == 1 左节点有覆盖,右节点有摄像头。left == 0 && right == 2 左节点无覆盖,右节点覆盖。left == 2 && right == 0 左节点覆盖,右节点无覆盖。题目:给定一个二叉树,我们在树的节点上安装摄像头。原创 2024-06-24 15:44:10 · 299 阅读 · 0 评论 -
738. 单调递增的数字
这样这个整数就是89,即小于98的最大的单调递增整数。所以我们可以从后向前遍历,用flag来标识前一位大于后一位的位置,然后从flag位置上从前向后遍历,将flag后的数字都改为9。题目:当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。给定一个整数 n ,返回小于或等于n的最大数字,且数字呈单调递增。(遇到其他不好标识的类型也可以尝试转化为数组类型的变量)本题需要注意整数的单调递增特性,例如:98,一。原创 2024-06-24 14:21:44 · 190 阅读 · 0 评论 -
56. 合并区间
请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。(相邻区间也算重叠)本题和前面几道题思路相似,都是判断区间重叠,但重叠后的具体操作不同,本题需要合并区间,我原本想通过两个int型变量来记录合并区间的开始位置和终止位置,若不重叠则存放结果,但导致当前不重叠区间没有存放进结果中,所以错误。正确思路应该是,将区间存入结果数组中,若区间重叠,则更改数组中最后一个区间的终止位置,改为两者中的最大值,若区间不重叠,则将新的区间存入数组中,这样就更新了下一区间的起始和终止位置。原创 2024-06-24 11:13:41 · 222 阅读 · 0 评论 -
763. 划分字母区间
本题我想到了去找当前子字符串出现字母的最远边界,但没有想出来如何去寻找。通过遍历整个字符串,找到之前遍历的所有字母的最远边界处,也就是分割点。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s。返回一个表示每个字符串片段的长度的列表。(2)从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点。(1)统计每一个字符最后出现的位置(使用一个数组进行统计)题目:给你一个字符串 s。我们要把这个字符串划分为。原创 2024-06-24 09:52:09 · 184 阅读 · 0 评论 -
452. 用最少数量的箭引爆气球
在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被 引爆。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。本题我的思路是对的,先根据每个气球的起始位置进行排序,再根据前气球的结束位置和后气球的起始位置进行比较,判断一支箭能否射破两个气球,但继续判断能否射破下一气球处遇到了问题。原创 2024-06-23 17:24:52 · 213 阅读 · 0 评论 -
406. 根据身高重建队列
*在本题中,先根据身高进行排列,在前面的人的身高一定比后面的人要高,然后优先按身高高的people的k来插入,后序插入节点也不会影响前面已经插入的节点,最终按照k的规则完成了队列。题目:假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。全局最优:最后都做完插入操作,整个队列满足题目队列属性。原创 2024-06-23 16:31:22 · 306 阅读 · 0 评论 -
135. 分发糖果
本题需注意第二个条件,一个孩子获取的糖果数需要和左右两边的孩子相比较,而不能只和一边的孩子相比较。局部最优:取candyVec[i + 1] + 1 和 candyVec[i] 最大的糖果数量(题目:n 个孩子站成一排。全局最优:相邻的孩子中,评分高的右孩子获得比左边孩子更多的糖果。你需要按照以下要求,给这些孩子分发糖果:(1)每个孩子。全局最优:相邻的孩子中,评分高的孩子获得更多的糖果。,因为左孩子大于右孩子的情况需要用上右孩子的比较情况)),保证第i个小孩的糖果数量既大于左边的也大于右边的。原创 2024-06-23 15:23:46 · 256 阅读 · 0 评论 -
134. 加油站
给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。:当前累加rest[i]的和curSum一旦小于0,起始位置至少要是i+1,因为从i之前开始一定不行。本题也可以使用暴力方法解题,遍历每一个加油站为起点,判断中间是否断油,而且最后油量大于等于0。题目:在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。原创 2024-06-23 14:43:25 · 160 阅读 · 0 评论 -
1005. K 次取反后最大化的数组和
题目:给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:选择某个下标 i 并将 nums[i] 替换为 -nums[i]。重复这个过程恰好 k 次。可以多次选择同一个下标 i。以这种方式修改数组后,返回数组 可能的最大和。局部最优:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大。第一步:将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小。第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完。第二步:从前向后遍历,遇到负数将其变为正数,同时K–原创 2024-06-22 16:34:11 · 192 阅读 · 0 评论 -
45. 跳跃游戏 II
每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:(1)0 <= j <= nums[i] (2)i + j < n返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。真正解题**从覆盖范围出发,尽量以最少的步数增加最大的覆盖范围,当覆盖范围大于最后一个元素下标时,得到的就是最少步数。**移动下标达到了当前覆盖的最远距离下标时,步数就要加一,来增加覆盖距离。原创 2024-06-21 15:42:03 · 132 阅读 · 0 评论 -
55. 跳跃游戏
题目:给你一个非负整数数组 nums ,你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回 true;否则,返回 false。本题我的思路是使用int型变量num储存最后一个下标,从最后一个元素往前退,当前面的元素下标加元素值大于等于num时,更新num为当前元素下标,最后判断num是否为0。原创 2024-06-21 15:04:08 · 247 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II
再把利润为正的相加求出最大利润。正利润的区间,就是股票买卖的区间,而我们只需要关注最终利润,不需要记录区间。那么只收集正利润就是贪心所贪的地方!给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。本题要注意可以在同一天购买和出售这个条件,那么我们就可以。你也可以先购买,然后在。原创 2024-06-21 10:46:38 · 174 阅读 · 0 评论 -
53. 最大子数组和
当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。题目:给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。本题我没有想清楚什么时候该记录最大值和什么条件下调整位置,从而导致没做出来。局部最优的情况下,并记录最大的“连续和”,可以推出全局最优。子数组是数组中的一个连续部分。:选取最大“连续和”原创 2024-06-21 10:06:03 · 238 阅读 · 0 评论 -
376. 摆动序列
此时 curDiff > 0 && preDiff <= 0,那么 result++(计算了左面的峰值),最后得到的 result 就是 2(峰值个数为 2 即摆动序列长度为 2)相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。原创 2024-06-20 20:29:25 · 420 阅读 · 0 评论 -
455. 分发饼干
对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j]。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。本题我的思路是小饼干优先满足胃口小的小孩,但没有弄清楚遍历顺序,也没有正确的移动下标,导致代码一直出错,使用一个int型变量来控制小孩数组的遍历,并且统计满足小孩的数量即可。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。,并输出这个最大数值。原创 2024-06-20 19:35:25 · 238 阅读 · 0 评论