贪心算法
文章平均质量分 76
贪心
gyjllll
这个作者很懒,什么都没留下…
展开
-
121. 买卖股票的最佳时机
给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择买入这只股票,并选择在卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0。5在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。0。原创 2024-01-30 20:34:58 · 777 阅读 · 0 评论 -
贪心算法总结
是的,如下三道题目,就是靠常识,但我都具体分析了局部最优是什么,全局最优是什么,贪心也要贪的有理有据!在讲解本题的过程中,还强调了编程语言的重要性,模拟插队的时候,使用C++中的list(链表)替代了vector(动态数组),效率会高很多。这里的题目如果没有接触过,其实是很难想到的,甚至接触过,也一时想不出来,所以题目不要做一遍,要多练!其实是动态规划的题目,但贪心性能更优,很多同学也是第一次发现贪心能比动规更优的题目。大家都知道股票系列问题是动规的专长,其实用贪心也可以解决。原创 2024-01-26 14:34:07 · 353 阅读 · 0 评论 -
738. 单调递增的数字
本题只要想清楚个例,例如98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]减一,strNum[i]赋值9,这样这个整数就是89。就可以很自然想到对应的贪心解法了。想到了贪心,还要考虑遍历顺序,只有从后向前遍历才能重复利用上次比较的结果。最后代码实现的时候,也需要一些技巧,例如用一个flag来标记从哪里开始赋值9。原创 2024-01-26 14:22:44 · 349 阅读 · 0 评论 -
56. 合并区间
本题的本质其实还是判断重叠区间问题。本题是判断区间重贴后要进行区间合并。所以一样的套路,先排序,让所有的相邻区间尽可能的重叠在一起,按左边界,或者右边界排序都可以,处理逻辑稍有不同。按照左边界从小到大排序之后,如果。原创 2024-01-26 13:53:16 · 311 阅读 · 0 评论 -
763. 划分字母区间
给你一个字符串s。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是s。返回一个表示每个字符串片段的长度的列表。[9,7,8]划分结果为 "ababcbaca"、"defegde"、"hijhklij"。每个字母最多出现在一个片段中。像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。[10]原创 2024-01-26 13:07:19 · 363 阅读 · 0 评论 -
435. 无重叠区间
给定一个区间的集合intervals,其中。返回需要移除区间的最小数量,使剩余区间互不重叠。1移除 [1,3] 后,剩下的区间没有重叠。2你需要移除两个 [1,2] 来使剩下的区间没有重叠。0你不需要移除任何区间,因为它们已经是无重叠的了。原创 2024-01-26 12:45:55 · 289 阅读 · 0 评论 -
452. 用最少数量的箭引爆气球
有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组points,其中表示水平直径在xstart和xend之间的气球。你不知道气球的确切 y 坐标。一支弓箭可以沿着 x 轴从不同点地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为startend, 且满足end,则该气球会被。可以射出的弓箭的数量。弓箭一旦被射出之后,可以无限地前进。给你一个数组points返回引爆所有气球所必须射出的弓箭数。原创 2024-01-26 12:29:57 · 975 阅读 · 0 评论 -
406. 根据身高重建队列
回归本题,整个插入过程如下:排序完的people: [[7,0], [7,1], [6,1], [5,0], [5,2],[4,4]]原创 2024-01-26 08:50:29 · 860 阅读 · 0 评论 -
860. 柠檬水找零
在柠檬水摊上,每一杯柠檬水的售价为5美元。顾客排队购买你的产品,(按账单bills支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付5美元、10美元或20美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付5美元。注意,一开始你手头没有任何零钱。给你一个整数数组bills,其中bills[i]是第i位顾客付的账。如果你能给每位顾客正确找零,返回true,否则返回false。true前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。原创 2024-01-25 23:05:13 · 372 阅读 · 0 评论 -
134. 加油站
在一条环路上有n个加油站,其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组gas和cost,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回-1。如果存在解,则它是的。3从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。此时油箱有 = 0 + 4 = 4 升汽油。原创 2024-01-25 22:28:59 · 857 阅读 · 0 评论 -
1005. K 次取反后最大化的数组和
给你一个整数数组nums和一个整数kinums[i]-nums[i]重复这个过程恰好k次。可以多次选择同一个下标i。以这种方式修改数组后,返回数组。5选择下标 1 ,nums 变为 [4,-2,3]。6选择下标 (1, 2, 2) ,nums 变为 [3,1,0,2]。13选择下标 (1, 4) ,nums 变为 [2,3,-1,5,4]。原创 2024-01-25 21:55:42 · 350 阅读 · 0 评论 -
45. 跳跃游戏 II
给定一个长度为n的整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说,如果你在nums[i]处,你可以跳转到任意i + j < n返回到达的最小跳跃次数。生成的测试用例可以到达。2跳到最后一个位置的最小跳跃数是2。从下标为 0 跳到下标为 1 的位置,跳1步,然后跳3步到达数组的最后一个位置。2nums[n-1]原创 2024-01-24 19:23:08 · 364 阅读 · 0 评论 -
55. 跳跃游戏
这道题目关键点在于:不用拘泥于每次究竟跳几步,也不要关注数组里0元素都在哪,而是看覆盖范围,覆盖范围内一定是可以跳过来的,不用管是怎么跳的。for循环遍历终止条件不要是数组的最大索引,而是要从覆盖范围里去索引,覆盖不到的还去索引,就没有意义,或者说就是范围没有连上,断了,就没意义了。原创 2024-01-23 21:36:16 · 380 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II
给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候只能持有股票。你也可以先购买,然后在出售。返回你能获得的利润。7在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。原创 2024-01-23 20:51:29 · 862 阅读 · 0 评论 -
53. 最大子数组和
给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。是数组中的一个连续部分。6连续子数组 [4,-1,2,1] 的和最大,为 6。原创 2024-01-23 20:09:52 · 826 阅读 · 0 评论 -
376. 摆动序列
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。例如,是一个,因为差值是正负交替出现的。可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。给你一个整数数组nums,返回nums中作为的。6整个序列均为摆动序列,各元素之间的差值为 (6, -3, 5, -7, 3)。7这个序列包含几个长度为 7 摆动序列。原创 2024-01-23 19:45:02 · 822 阅读 · 0 评论 -
455. 分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干j,都有一个尺寸s[j]。如果,我们可以将这个饼干j分配给孩子i,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。1你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。所以你应该输出1。2。原创 2024-01-23 18:57:49 · 800 阅读 · 0 评论