![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
贪心
烟白
这个作者很懒,什么都没留下…
展开
-
119、股票问题Ⅱ-已经做过-LeetCode-122
题目:给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。返回 你能获得的 最大 利润 。来源:力扣(LeetCode)思路:贪心:计算差值,只要正数动态规划:记录持有和不持有两种状态,最后不持有股票时利润最大!代码:贪心 + 动态规划...原创 2022-07-11 15:15:10 · 50 阅读 · 0 评论 -
96、★★★贪心-动态规划-LeetCode-968.监控二叉树
题目:给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。思路:(1)想法:一个节点:错误1)被监控了;2)没有被监控:①还可以被后面节点添加之后监控;②不能被后面节点添加之后监控一直使用层序遍历的方式;应该使用递归的方式进行!(2)答案思路:贪心看到子节点上放 摄像机必然说亏的,尽量往父节点上去放!比如:子节点放,顶多回去监控个父;结果就是 1 : 1;或者 2 : 1;原创 2022-04-25 21:55:31 · 261 阅读 · 0 评论 -
95、★★贪心和动态规划-LeeoCode-714.买卖股票的最佳时机-类似122的买卖股票的动态规划
题目:给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。来源:力扣(LeetCode)思路:动态规划和贪心经常会一起出现;不同情况下,可能某一个更容易理解!1)动态规划容易理解:原创 2022-04-24 15:14:27 · 287 阅读 · 0 评论 -
94、贪心-LeetCode-738.单调递增的数字
题目:思路:1)后一位比前一位小,就前一位减一,后全部变为9!最优代码:1)错误class Solution { public int monotoneIncreasingDigits(int n) { //1.暴力:从该数字递减对比!超时 for(int i = n;i >= 0;i--){ //取各个位置上的数 int a = i % 10;//取得余数 int b原创 2022-04-24 11:15:11 · 423 阅读 · 0 评论 -
93、贪心-其实也不太像贪心-LeetCode-56.合并区间
题目:以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。来源:力扣(LeetCode)思路:1)排序:按照左边界排序!遍历过程中实时更改右边界,每次进去就查找重叠的区间;左边界进去的时候必然是最小的;右边界实时改变!代码:1)排序 + 贪心:会排序就简单了,按左边界大小排序class Solution {..原创 2022-04-23 22:34:14 · 513 阅读 · 0 评论 -
92、★★不太像贪心-LeetCode-763.划分字母区间-维护最远距离-注意代码处理细节
题目:字符串S由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。思路:看了题解更像是哈希的使用,数组模拟哈希!1)最重要的思想:记录每个字母在 字符串中的 最远位置下标!实时更新需要截取的子串的 右边界,也就是字母最远位置下标!如果前面的字母都还没有到达最大距离,说明后面还有字母等着加到这个子串中;如果在往后的过程中,新的字符又在更远的距离中,则需要更新距离,因为这些字符是交替出现,且要连接在一起!!!..原创 2022-04-22 15:27:11 · 217 阅读 · 0 评论 -
91、★贪心-二维-类似于90的力扣452题-LeetCode-435.无重叠区间
题目描述:给定一个区间的集合intervals,其中 intervals[i] = [starti, endi]。返回 需要移除区间的最小数量,使剩余区间互不重叠。来源:力扣(LeetCode)思路:1)二维数组的排序:要考虑 0 的情况,返回值为什么!避免溢出: Arrays.sort(intervals,new Comparator<int[]>(){ @Override public int c...原创 2022-04-22 14:34:48 · 526 阅读 · 0 评论 -
90、贪心-LeetCode-452.用最少数量的箭引爆气球
题目描述:有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组points,其中points[i] = [xstart, xend]表示水平直径在xstart和xend之间的气球。你不知道气球的确切 y 坐标。一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart≤ x ≤ xend,则该气球会被 引爆。可以射出的弓箭的数量 没有限制 。 弓箭一旦被射...原创 2022-04-22 13:39:52 · 385 阅读 · 0 评论 -
89、★★贪心-多维度-LeetCode-406.根据身高重建队列
题目描述:假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。来源:力扣(LeetCode)思路:1).原创 2022-04-21 13:48:50 · 526 阅读 · 0 评论 -
88、贪心-柠檬水找零-LeetCode-860.柠檬水找零
题目描述:在柠檬水摊上,每一杯柠檬水的售价为5美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零,返回true,否则返回 false。来源:力扣(LeetCode)思路:...原创 2022-04-21 11:01:42 · 62 阅读 · 0 评论 -
87、★贪心-LeetCode-135.分发糖果-字节面试题
题目描述:n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。来源:力扣(LeetCode)思路:1)代码回想录,左右分别遍历的思想;手写出的贪心。用一个数组记录每个位置的糖果数!感觉像动态规划①正常的思路,就是左右都要比!②累加的思想:比如 1 5 4 3 2 1从原创 2022-04-20 23:47:33 · 161 阅读 · 0 评论 -
86、★贪心-LeetCode-134.加油站
题目描述:在一条环路上有 n个加油站,其中第 i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组 gas 和 cost ,如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。来源:力扣(LeetCode)思路:1)暴力:for对每个入口进行判断,进去就挨个判断!2)贪心:...原创 2022-04-19 20:41:27 · 101 阅读 · 0 评论 -
85、★贪心-LeetCode-1005.K次取反后最大化
题目描述:给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:选择某个下标 i并将 nums[i] 替换为 -nums[i] 。重复这个过程恰好 k 次。可以多次选择同一个下标 i 。以这种方式修改数组后,返回数组 可能的最大和 。来源:力扣(LeetCode)思路:排序很重要!当然还要学习手写排序和搜索!贪心体现在:每次:反转最小的负数;反转最小的正数;代码:1)错误的情况:忽略了负数取反后会出现小于原来最小正数的情况!class Soluti.原创 2022-04-18 15:15:09 · 529 阅读 · 0 评论 -
84、★贪心、动态规划-LeetCode.45跳跃游戏Ⅱ-华为笔试
题目描述:给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。来源:力扣(LeetCode)思路:贪心难想,想到的动态规划时间复杂度高!1)动态规划:记录到达每个位置的最短跳数;每个位置的计算,返回从头,去查找可以跳到该位置的位置,记录其dp[j] + 1,每次取出最小的!2)贪心:① //从后往前,每次找最大?每次都..原创 2022-04-18 14:04:37 · 2805 阅读 · 0 评论 -
83、★★贪心-LeetCode-55.跳跃游戏
题目描述:给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。思路:感觉贪心的算法都不长,但是需要找到贪心的点!这道题就是将能够到达的位置,每次贪心的取到最远位置,看能不能到达最尾部!自己的思路在考虑能不能 越过 0的位置,不容易想代码:1)保留下自己的思路:想不到i这里怎么处理:想到了 i 要按照他自己能够到达的位置 作为限制条件;但是没有想到实时更新最大可到达返原创 2022-04-18 11:11:56 · 2661 阅读 · 0 评论 -
82、★纯粹的贪心-LeetCode-122.买卖股票的最佳时机
题目描述:给定一个数组 prices ,其中 prices[i] 表示股票第 i 天的价格。在每一天,你可能会决定购买和/或出售股票。你在任何时候最多只能持有 一股 股票。你也可以购买它,然后在 同一天 出售。返回 你能获得的 最大 利润。来源:力扣(LeetCode)思路:看了答案,没有想到题解!同一天可以卖出并买入,感觉其实没这个条件也是可以的!1)贪心:将利润拆分成了 每一天的利润!!!将利润的计算拆分带了每一天!将每一个正利润都加起来,就可以了!持续正利润...原创 2022-04-18 10:25:18 · 146 阅读 · 0 评论 -
80、★★贪心和动态规划-LeetCode-376.摆动序列
题目描述:如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。例如,[1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3)是正负交替出现的。相反,[1, 4, 7, 2, 5]和[1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。子序列 可以通过从原始...原创 2022-04-17 16:19:29 · 332 阅读 · 0 评论 -
79、贪心算法-不像贪心的贪心-LeetCode-455.分发饼干
题目描述:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。来源:力扣(LeetCode)思路:贪心专题,但是没想到排序就是贪心...代码:1)排序 + 贪心:倒不如原创 2022-04-17 14:43:26 · 518 阅读 · 0 评论