![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
贪心
cx_cs
这个作者很懒,什么都没留下…
展开
-
135. 分发糖果
无原创 2023-03-09 11:36:03 · 119 阅读 · 0 评论 -
45. 跳跃游戏 II
无原创 2022-08-18 11:27:17 · 648 阅读 · 0 评论 -
334. 递增的三元子序列
要求:是否有长度为3的上升子序列思路:最长上升子序列限制长度版,当然可以照搬那题创建两个长度为 nn 的数组 leftMin 和 rightMax,leftMin[i] 表示 nums[0] 到nums[i] 中的最小值,rightMax[i] 表示nums[i] 到 nums[n−1] 中的最大值。然后再遍历一次即可class Solution {public: bool increasingTriplet(vector<int>& nums) { i原创 2022-04-18 10:44:25 · 57 阅读 · 0 评论 -
134. 加油站
要求:在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组 gas 和 cost ,如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。思路:首先如果从x只能到y不能到y+1,也就是油量-消耗小于0,那么x和y之间任意点都到不了y+1(显然),我们从y+2开始,原创 2022-04-05 11:57:42 · 106 阅读 · 0 评论 -
621. 任务调度器
要求:两个 相同种类 的任务之间必须有长度为整数 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。你需要计算完成所有任务所需要的 最短时间 。思路:最多的那个任务设x个,间隔n,开x个桶,每个桶容量x+1,桶用来填充其他任务即每个桶有1+其他x个。1、前x-1桶都会执行n次就算填不满,最后一桶执行完了就没了,即(x-1)(n+1)+最后一桶数量cnt,根据贪心,最后一桶只放那些数量等于x的,其他都放前x-1桶哪怕装不下2、桶装不下可以继续填桶后,仍然是一桶一原创 2022-03-24 13:50:56 · 133 阅读 · 0 评论 -
11. 盛最多水的容器
要求:找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。思路:双指针指向首尾,每次移动高度小的那个指针证明:开始时h1<h2,两指针间距t,面积h1t。若移动右指针,设移到h3。首先新间距t1<t。若h3>=h1,新面积为h1t1<h1t;若h3<h1,新面积h3t1<h1*t。也就是说不管右指针移到哪面积只会变小所以没意义了,只能移动左指针,即移动小的class Solution {public: int maxArea(vector&原创 2022-03-17 16:15:09 · 114 阅读 · 0 评论 -
53. 最大子序和
要求:找最大连续和思路:法一:动态规划,记录到以下标i结尾的最大连续和,显然满足关系dp[i]=max(dp[i-1]+nums[i],nums[i]),就是前面i-1个最大连续和大于0才加。时间O(n),空间O(1),下面代码dp[n]数组实际上可以用一个pre变量代替class Solution {public: int maxSubArray(vector<int>& nums) { int n=nums.size(); int dp原创 2021-10-09 20:48:49 · 51 阅读 · 0 评论 -
763. 划分字母区间
要求:把字符串划分为尽可能多的片段,且同一字母最多出现在一个片段,返回每个片段长度思路:片段结尾必然是某个字符最后一次出现的下标,所以先从后遍历找到每个字符最后一次出现的下标记在map里。然后从0开始遍历,不停更新片段结尾即可class Solution {public: vector<int> partitionLabels(string s) { //先从后遍历确定每个字符最后出现的位置 unordered_map<char,int>原创 2021-10-09 20:10:18 · 49 阅读 · 0 评论 -
665. 非递减数列
要求:请你判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列思路:nums[i]>nums[i+1]时,根据贪心先改前面的使得尽可能小,但是有一种情况当nums[i-1]>nums[i+1]时只能改后面的class Solution {public: bool checkPossibility(vector<int>& nums) { int n=nums.size(); int cnt=0; boo原创 2021-10-07 11:05:46 · 54 阅读 · 0 评论 -
392. 判断子序列
要求:判断s是否是t子串,可以不连续思路:。class Solution {public: bool isSubsequence(string s, string t) { int sn=s.length(),tn=t.length(); int si=0; for(int ti=0;ti<tn&&si<sn;++ti) if(s[si]==t[ti])++si; return原创 2021-10-07 10:01:27 · 48 阅读 · 0 评论 -
605. 种花问题
要求:找0放1,1不能相邻思路:简单class Solution {public: bool canPlaceFlowers(vector<int>& flowerbed, int n) { const int m = flowerbed.size(); for(int i = 0; i < m; ++i) if(!flowerbed[i]&&(i==m-1||!flowerbed[i+1])&a原创 2021-10-06 22:03:30 · 74 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II
要求:做波段思路:后大于前的都加上,也太简单了class Solution {public: int maxProfit(vector<int>& prices) { int n=prices.size(); int maxprofit=0; for(int i=0;i+1<n;++i) if(prices[i]<prices[i+1]) maxprofit+原创 2021-10-01 21:43:57 · 2728 阅读 · 0 评论 -
121. 买卖股票的最佳时机
要求:给几天价格求买一次卖一次最大利润思路:只要一次遍历,若当前股价大于前面最低,则记录最低下标,否则计算最大利润class Solution {public: int maxProfit(vector<int>& prices) { int n=prices.size(); int maxprofit=0; int minindex=0; for(int i=1;i<n;i++){原创 2021-10-01 21:15:19 · 53 阅读 · 0 评论 -
406. 根据身高重建队列
要求:给身高及站前面不低于自己的人数,重排思路:按从高到低,值从大到小排好,插入位置刚好是begin+值class Solution {public: static bool cmp(vector<int> &a,vector<int> &b){ return a[0]!=b[0]?a[0]>b[0]:a[1]<b[1]; } vector<vector<int>> reconstruc原创 2021-09-29 21:33:44 · 44 阅读 · 0 评论 -
452. 用最少数量的箭引爆气球
要求:气球数组给出每个气球区间,最少的箭打爆思路:类似于区间去重叠,打爆就是去重叠的过程,按右端点排序,最小右端点以内至少要打一次class Solution {public: static bool cmp(vector<int> &a,vector<int> &b){ return a[1]<b[1]; } bool isoverlap(vector<int> &a,vector<int原创 2021-09-29 21:30:53 · 36 阅读 · 0 评论 -
435. 无重叠区间
要求:最少删几个区间使其不重叠思路:贪心,一开始删重叠次数最多的,事实证明过不了,后来看了题解,贪心就是要选择右端点小的先放,如果右端点大的话很快塞满了,所以先按右端点排序,然后从左遍历,遇到两个重叠的贪心当然是删右边这个,过了,玄学class Solution {public: static bool cmp(vector<int> &a,vector<int> &b){ return a[1]<b[1]; } b原创 2021-09-29 14:40:03 · 48 阅读 · 0 评论 -
455. 分发饼干
要求:孩子食量数组,饼干数组,每个孩子只能吃一个,要求最大能满足多少个孩子思路:先排序,复杂度O不写了class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { int gn=g.size(),sn=s.size(); int sindex=0,gindex=0,num=0; sort(g.begin()原创 2021-09-29 12:25:04 · 40 阅读 · 0 评论