讲解链接:https://programmercarl.com/0455.%E5%88%86%E5%8F%91%E9%A5%BC%E5%B9%B2.html
// 参考代码
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(), g.end());
sort(s.begin(), s.end());
int index = s.size() - 1; // 饼干数组的下标
int result = 0;
for (int i = g.size() - 1; i >= 0; i--) { // 遍历胃口
if (index >= 0 && s[index] >= g[i]) { // 遍历饼干
result++;
index--;
}
}
return result;
}
};
//自己写的代码,有点费事了
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(),g.end());
sort(s.begin(),s.end());
int sum = 0;
vector<bool> used_s(s.size(),false);
vector<bool> used_g(g.size(),false);
for(int i=g.size()-1;i>=0;i--) {
for(int j=s.size()-1;j>=0;j--) {
if(used_s[j]==false && used_g[i] == false && s[j]>=g[i]) {
used_s[j]=true;
used_g[i]=true;
sum++;
}
else if(s[j] < g[i])
break;
else if(used_s[j]==true)
continue;
}
}
return sum;
}
};
讲解链接:https://programmercarl.com/0376.%E6%91%86%E5%8A%A8%E5%BA%8F%E5%88%97.html
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if(nums.size()<=1)
return nums.size();
//计算数组中i+1 与 i 之间的差值
int curDiff = 0;
//在result更新的时候再更新preDiff
int preDiff = 0;
//记录峰值的个数;
int result = 1;
for(int i=0;i<nums.size()-1;i++) {
curDiff = nums[i+1] - nums[i];
//注意这里的符号是左≤且右> || 左≥且右<
if((preDiff <=0 && curDiff >0) ||(preDiff>=0 && curDiff<0)) {
result++;
preDiff = curDiff;
}
}
return result;
}
};
讲解链接:https://programmercarl.com/0053.%E6%9C%80%E5%A4%A7%E5%AD%90%E5%BA%8F%E5%92%8C.html
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int result = INT32_MIN;
int count = 0;
for(int i=0;i<nums.size();i++) {
count+=nums[i];
if(count > result) {
result = count; //更新result;
}
if(count<=0) // 相当于重置最大子序起始位置,因为遇到负数一定是拉低总和
count = 0;
}
return result;
}
};