【leetcode刷题】分发饼干【455】
一、题目-- 455.分发饼干
1.题目描述
二、解题报告
1.思路分析
-
贪心算法
人和饼干都从小到大排序,进行匹配尽量让小饼干给胃口小的人吃【人也贪心,饼干也贪心】 -
KMP算法模式串匹配
2.代码详解
C++👇【贪心】
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(),g.end());
sort(s.begin(),s.end());
int k=0;
int count=0;
for(int t1=0;t1<g.size();t1++){
for(int t2=k;t2<s.size();t2++){
if(g[t1]<=s[t2]){
k=t2+1;
count++;
break;
}
}
}
return count;
}
};
3.注意事项C++
- sort用法
在C++中使用sort()函数需要使用#include<algorithm>
sort(begin, end, cmp)
begin为指向待sort()的数组的第一个元素的指针
end为指向待sort()的数组的最后一个元素的下一个位置的指针
cmp参数为排序准则,cmp如果不写的话,默认从小到大进行排序【从大到小排序可以将cmp参数写为greater()就是对int数组进行排序,当然<>中我们也可以写double、long、float】
若是对数组的特定位置排序只需
for (int t1=0;t1<a;t1++){
scanf("%d",&N[t1]);
}
sort(N,N+a);
- vector操作
a.assign(b.begin(), b.begin()+3); //b为向量,将b的0~2个元素构成的向量赋给a
a.assign(4,2); //是a只含4个元素,且每个元素为2
a.back(); //返回a的最后一个元素
a.front(); //返回a的第一个元素
a[i]; //返回a的第i个元素,当且仅当a[i]存在
a.clear(); //清空a中的元素
a.empty(); //判断a是否为空,空则返回ture,不空则返回false
a.pop_back(); //删除a向量的最后一个元素
a.erase(a.begin()+0,a.begin()+3); //删除a中第0个到第2个元素,也就是说删除的元素从a.begin()+0算起(包括它)一直到a.begin()+3(不包括它)
a.size(); //返回a中元素的个数;
a.capacity(); //返回a在内存中总共可以容纳的元素个数
a.swap(b); //b为向量,将a中的元素和b中的元素进行整体性交换
a==b; //b为向量,向量的比较操作还有!=,>=,<=,>,<
- 注意if里面要break,假设避免第一个人吃完第一个又吃第二个饼干
三、题目 – 561. 数组拆分 I
1.题目描述
上面那道会做了以后,这道简简单单搞定定~~~~~无讲解😁
2.代码详解
class Solution {
public:
int arrayPairSum(vector<int>& nums) {
sort(nums.begin(),nums.end());
int sum=0;
for(int t1=0;t1<nums.size();t1++){
sum=sum+nums[t1];
t1++;
}
return sum;
}
};