大饼干喂饱大胃口
int cmp(int* a, int* b) { return *a - *b; }
int findContentChildren(int* g, int gSize, int* s, int sSize) {
if (sSize == 0)
return 0;
qsort(g, gSize, sizeof(int), cmp);
qsort(s, sSize, sizeof(int), cmp);
int count = 0;
int start = sSize - 1;
for (int i = gSize - 1; i >= 0; i--) {
if (start >= 0 && s[start] >= g[i]) {
start--;
count++;
}
}
return count;
}
小饼干喂饱小胃口
int cmp(int* a, int* b) {
return *a - *b;
}
int findContentChildren(int* g, int gSize, int* s, int sSize){
if(sSize == 0)
return 0;
qsort(g, gSize, sizeof(int), cmp);
qsort(s, sSize, sizeof(int), cmp);
int numFedChildren = 0;
int i = 0;
for(i = 0; i < sSize; ++i) {
if(numFedChildren < gSize && g[numFedChildren] <= s[i])
numFedChildren++;
}
return numFedChildren;
}
这道题可以将抽象一张图,条件就是有坡峰
然后题目中提及到删除,但是我们并不需要真的去删除,我们只需要将出现坡峰的值记录下来就好了
有三种情况
第一种:上下坡中有平坡
第二种:只有首尾只有两个元素
第三种:单调坡中有平坡
int wiggleMaxLength(int* nums, int numsSize){
if(numsSize <= 1){
return numsSize;
}
int length = 1;
int preDiff, curDiff;
preDiff = curDiff = 0;
for(int i = 0; i < numsSize - 1; ++i){
curDiff = nums[i+1] - nums[i];
if((curDiff > 0 && preDiff <= 0) || (preDiff >= 0 && curDiff < 0)){
preDiff = curDiff;
length++;
}
}
return length;
}
当我的连续和为负数的时候,那么再继续加下去,也没有用,会使得值变小,所以要舍弃前面的,从当前位置重新来,
int maxSubArray(int* nums, int numsSize){
int maxVal = INT_MIN;
int subArrSum = 0;
int i;
for(i = 0; i < numsSize; ++i) {
subArrSum += nums[i];
maxVal = subArrSum > maxVal ? subArrSum : maxVal;
subArrSum = subArrSum < 0 ? 0 : subArrSum;
}
return maxVal;
}
本文介绍了两个C语言函数findContentChildren用于处理分发饼干问题,以及wiggleMaxLength和maxSubArray算法,分别用于求解摆动序列的最大长度和最大子数组和问题。
1700

被折叠的 条评论
为什么被折叠?



