455. 分发饼干
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
//贪心算法
sort(g.begin(),g.end());
sort(s.begin(),s.end());
int child=0,cookies=0;
while(child<g.size()&&cookies<s.size())
{
if(g[child]<=s[cookies])
{
child++;
}
cookies++;
}
return child;
}
};
class Solution {
public:
int candy(vector<int>& ratings) {
int n=ratings.size();
if(n<2)
{
return n;
}
//每一个人都给一个糖
vector<int> num(n,1);
//第一次遍历 从左往右
for(int i=1;i<n;i++)
{
if(ratings[i]>ratings[i-1])
{
num[i]=num[i-1]+1;
}
}
//第二次遍历 从右到左
for(int i =n-1;i>0;i--)
{
if(ratings[i]<ratings[i-1])
{
num[i-1]=max(num[i-1],num[i]+1);
}
}
return accumulate(num.begin(),num.end(),0);
}
};
class Solution {
public:
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
//特殊情况 空
if(intervals.empty())
{
return 0;
}
//按尾部进行递增排序
sort(intervals.begin(), intervals.end(), [](const auto& u, const auto& v) {
return u[1] < v[1];
});
int n=intervals.size();
//定义尾部
int total=1,prev=intervals[0][1];
for(int i=1;i<n;i++)
{
//第二个的头部大于第一个尾部就重叠
if(intervals[i][0]>=prev)
{
total++;
prev=intervals[i][1];
}
}
return n-total;
}
};
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n=prices.size(),ann=0;
//从1开始
for(int i=1;i<n;i++)
{
ann+=max(0,prices[i]-prices[i-1]);
}
return ann;
}
};
/**
* 贪心
* 能种花的地方
* 当前位置没有花
* 前面要么没有花, 要么是边界
* 后面要么没有花, 要么是边界
*/
class Solution {
public:
bool canPlaceFlowers(vector<int>& flowerbed, int n) {
int length=flowerbed.size();
for(int i=0;i<length;i++)
{
//i==0&&flowerbed[i+1]==0 表明在左墙可以种花
//flowerbed[i-1]==0&&i==length-1 表明在右墙可以种花
if(flowerbed[i]==0&&(i==0||flowerbed[i-1]==0)&&(i==length-1||flowerbed[i+1]==0))
{
n--;
flowerbed[i]=1;
}
}
if(n<=0)
{
return true;
}
else
{
return false;
}
}
};
class Solution {
public:
int findMinArrowShots(vector<vector<int>>& points) {
if(points.empty())
{
return 0;
}
//按尾部进行升序
sort(points.begin(),points.end(),[](const vector<int>&u,const vector<int>&v)
{
return u[1]<v[1];
});
int pre=points[0][1],ans=1;
for(const vector<int>ballon:points)
{
//下一个的头大于上一个的尾部 就需要再用一支箭
if(ballon[0]>pre)
{
ans++;
pre=ballon[1];
}
}
return ans;
}
};
class Solution {
public:
vector<int> partitionLabels(string s) {
int n=s.size();
int last[26];
for(int i=0;i<n;i++)
{
last[s[i]-'a']=i;
}
vector<int> partition;
int start=0 ,end=0;
for(int i=0;i<n;i++)
{
end=max(end,last[s[i]-'a']);
if(end==i)
{
partition.push_back(end-start+1);
start=end+1;
}
}
return partition;
}
};
class Solution {
public:
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
//由高到低进行排序
sort(people.begin(),people.end(),[](const vector<int> & u,const vector<int> & v)
{
//同高度按 第二位由小到大
return u[0]>v[0]||u[0]==v[0]&&u[1]<v[1];
});
vector<vector<int>> ans;
for(const vector<int>& person:people)
{
ans.insert(ans.begin()+person[1],person);
}
return ans;
}
};
class Solution {
public:
bool checkPossibility(vector<int>& nums) {
int n=nums.size(),cnn=0;
for(int i=0;i<n-1;i++)
{
int x=nums[i],y=nums[i+1];
if(x>y)
{
cnn++;
if(cnn>1)
{
return false;
}
if(i>0&&nums[i-1]>y)
{
nums[i+1]=x;
}
}
}
return true;
}
};