贪心算法
文章平均质量分 65
贪心算法
hlc@
这个作者很懒,什么都没留下…
展开
-
【数据结构-邻项消除】力扣2211. 统计道路上的碰撞次数
我们采用贪心的思想,实际上R和L相撞,也就是两个车停下,碰撞+2,R或L和S相撞,也就是一个车停下,碰撞+1。所以也就是,除了开头为L和结尾为R的不会影响结果的车,其他L和R的车的数量一定会碰撞并且停下,那么碰撞数量就是这些L和R的车的总和。我们在代码开头,用两个while将指针跳过不影响结果的元素,然后统计L和R的数量,最终结果就是碰撞数。碰撞发生后,涉及的车辆将无法继续移动并停留在碰撞位置。因此,将会在道路上发生的碰撞总次数是 0。当一辆移动的车和一辆静止的车相撞时,碰撞次数加 1。原创 2024-10-31 02:23:10 · 509 阅读 · 0 评论 -
【状态机DP】【贪心】力扣376. 摆动序列
表示nums[i]可以接在down[i-1]的最长下降摆动子序列后面的情况,那怎么能说明down[i-1]中的最长下降摆动子序列的最后一个元素不大于nums[i-1]呢,实际上我们可以采用反证的方法,如果down[i-1]中最长下降摆动子序列的最后一个元素大于nums[i-1]的话,那么nums[i-1]则会成为down[i-1]的最后一个元素。其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8)。,其中 n 是序列的长度。原创 2024-10-20 15:53:29 · 358 阅读 · 0 评论 -
【贪心】力扣122. 买卖股票的最佳时机 II
解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。输入:prices = [7,1,5,3,6,4]返回 你能获得的 最大 利润。原创 2024-10-12 19:39:03 · 149 阅读 · 0 评论 -
【数据结构-栈】【贪心】力扣2434. 使用机器人打印字典序最小的字符串
我们可以思考,将t想象成一个栈,先进后出,然后当栈顶元素的值,也就是t的末尾的值比字符串s中的任何一个字符都要小的时候,那么我们就要将栈顶元素推入p中,也就是写出来的字符串,这样才能保证最小字典序列。,由于0代表a,1代表b…执行第一个操作四次,得到 p=“” ,s=“” ,t=“bdda”。执行第一个操作三次,得到 p=“” ,s=“” ,t=“zza”。执行第一个操作,得到 p=“ab” ,s=“” ,t=“c”。执行第二个操作,得到 p=“abc” ,s=“” ,t=“”。原创 2024-10-12 02:10:10 · 416 阅读 · 0 评论 -
【动态规划-4.2 最长递增子序列(LIS)】力扣300. 最长递增子序列
我们需要的是len的长度,len++的来源于nums[i]大于d[len],如果d[len]被替换成更小的nums[i],会对后续的len++有正面影响,如果nums[i]替换掉的不是d[len],假设是d[len-1],那么会减小d[len-1]的值,在后续的nums[i]的替换中,会变得更容易被选为pos,从而替换d[len-1],然后对后续的len++有正面影响。由于nums[i]经过二分查找,肯定比d[pos+1]要小,所以在相同长度的子序列中,末尾最小元素就为nums[i]。:O(nlogn)。原创 2024-10-08 02:10:46 · 950 阅读 · 0 评论 -
【数据结构-差分】【贪心】力扣1526. 形成目标数组的子数组最少增加次数
我们要找的实际上有两个递增区间,一个是[3](第一个区间的最小值默认为0),他最大值3减去最小值0的差为3,第二个递增区间是[1,2],2-1=1,所以差为1。解释:(initial)[0,0,0,0] -> [1,1,1,1] -> [1,1,1,2] -> [2,1,1,2] -> [3,1,1,2] (target)。解释:(initial)[0,0,0,0,0] -> [1,1,1,1,1] -> [2,1,1,1,1] -> [3,1,1,1,1]输入:target = [1,2,3,2,1]原创 2024-09-21 17:13:24 · 567 阅读 · 0 评论 -
【贪心】【数据结构-小根堆,差分】力扣2406. 将区间分为最少组数
当新区间的左端点要比堆顶元素(最小右端点)大的时候,那么就将这个区间分到堆顶元素所在的组中,由于我们只需要记录每个组的最大右端点,那么就将堆顶元素替换成新区间的右端点,然后priority_queue将会保证堆顶元素是最小的(所有组的最大右端点比较后的最小的最大右端点)。比方说区间 [1, 5] 和 [5, 8] 相交。输入:intervals = [[5,10],[6,8],[1,5],[2,3],[1,10]]输入:intervals = [[1,3],[5,6],[8,10],[11,13]]原创 2024-09-18 02:02:22 · 463 阅读 · 0 评论 -
【贪心】【合并】力扣56. 合并区间
如果不是的话,说明会重叠,这时候就要更新merged最后一个区间的第二个元素,如果interval[1]较大,就将merged最后一个区间的第二个元素更改为interval[1]来表示一个最大的完整的范围。如上图,我们的代码会判断第二个interval的第一个元素比第一个interval的第二个元素小,这时候就会进行合并的逻辑,返回[1,4]这个错误答案。输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]原创 2024-09-14 15:47:17 · 423 阅读 · 0 评论 -
【贪心】力扣2960. 统计已测试设备
在设备 0 上,batteryPercentages[0] > 0 ,现在有 1 个已测试设备,batteryPercentages 变为 [1,0,1,0,2]。在设备 2 上,batteryPercentages[2] > 0 ,现在有 2 个已测试设备,batteryPercentages 变为 [1,0,1,0,1]。在设备 1 上,batteryPercentages[1] > 0 ,现在有 1 个已测试设备,batteryPercentages 变为 [0,1,1]。原创 2024-09-12 18:34:31 · 281 阅读 · 0 评论 -
【贪心算法】力扣1833.雪糕的最大数量
之后freq进行迭代,当coins >= price的时候,说明可以买得起这个价位的雪糕,然后用curCount来储存买得起雪糕的数量。商店中新到 n 支雪糕,用长度为 n 的数组 costs 表示雪糕的定价,其中 costs[i] 表示第 i 支雪糕的现金价格。,其中 n 是数组 costs 的长度。解释:Tony 可以买下所有的雪糕,总价为 1 + 6 + 3 + 1 + 2 + 5 = 18。解释:Tony 可以买下标为 0、1、2、4 的雪糕,总价为 1 + 3 + 2 + 1 = 7。原创 2024-07-16 14:23:41 · 535 阅读 · 0 评论 -
【贪心算法】力扣1338.数组大小减半
选择 {2,7} 是不可行的,它的结果数组为 [3,3,3,3,5,5,5],新数组长度大于原数组的二分之一。解释:选择 {3,7} 使得结果数组为 [5,5,5,2,2]、长度为 5(原数组长度的一半)。给你一个整数数组 arr。大小为 2 的可行集合有 {3,5},{3,2},{5,2}。输入:arr = [3,3,3,3,5,5,5,2,2,7]返回 至少 能删除数组中的一半整数的整数集合的最小大小。解释:我们只能选择集合 {7},结果数组为空。输入:arr = [7,7,7,7,7,7]原创 2024-07-19 15:03:49 · 229 阅读 · 0 评论 -
【贪心算法】力扣2279.装满石头的背包的最大数量
这道题首先题目给出了你capacity和rocks两个动态数组vector,这是比较常见的贪心题,我们首先先计算背包最大容量和背包现有的石头的差,计算出背包剩余空间。输入:capacity = [2,3,4,5], rocks = [1,2,4,4], additionalRocks = 2。输入:capacity = [10,2,2], rocks = [2,2,0], additionalRocks = 100。请你将额外的石头放入一些背包中,并返回放置后装满石头的背包的 最大 数量。原创 2024-07-17 10:01:52 · 170 阅读 · 0 评论 -
【贪心算法】力扣1481.不同整数的最少数目
for(auto [_,sb] : freq)是结构化绑定,由于我们不需要用到freq的第一个元素,所以用" _ "来表示在结构化绑定中忽略该元素。解释:先移除 4、2 ,然后再移除两个 1 中的任意 1 个或者三个 3 中的任意 1 个,最后剩下 1 和 3 两种整数。给你一个整数数组 arr 和一个整数 k。现需要从数组中恰好移除 k 个元素,请找出移除后数组中不同整数的最少数目。输入:arr = [4,3,1,1,3,3,2], k = 3。解释:移除 1 个 4 ,数组中只剩下 5 一种整数。原创 2024-07-18 11:03:01 · 290 阅读 · 0 评论
分享