苏州h5建站,百度竞价点击软件,企业工商信息查询官网,夹江企业网站建设报价代码随想录算法训练营第5周#xff08;C语言#xff09;|Day31#xff08;贪心算法#xff09;
Day31、贪心算法#xff08;包含题目 455.分发饼干 376. 摆动序列 53. 最大子序和 #xff09;
455.分发饼干
题目描述
假设你是一位很棒的家长#xff0c;想要给你的孩… 代码随想录算法训练营第5周C语言|Day31贪心算法
Day31、贪心算法包含题目 455.分发饼干 376. 摆动序列 53. 最大子序和
455.分发饼干
题目描述
假设你是一位很棒的家长想要给你的孩子们一些小饼干。但是每个孩子最多只能给一块饼干。
对每个孩子 i都有一个胃口值 g[i]这是能让孩子们满足胃口的饼干的最小尺寸并且每块饼干 j都有一个尺寸 s[j] 。如果 s[j] g[i]我们可以将这个饼干 j 分配给孩子 i 这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子并输出这个最大数值。
题目解答
void quicksotr(int *nums,int left,int right){if(leftright){return;}int left1left;int right1right;int knums[left1];while(left1right1){//做快排的时候一定要注意这个left1right1条件while(left1right1knums[right1]){right1--;}nums[left1]nums[right1];while(left1right1knums[left1]){left1;}nums[right1]nums[left1];}nums[left1]k;quicksotr(nums,left,left1-1);quicksotr(nums,left11,right);return;
}
int findContentChildren(int* g, int gSize, int* s, int sSize) {quicksotr(g,0,gSize-1);quicksotr(s,0,sSize-1);int gi0;for(int i0;isSize;i){if(gigSizeg[gi]s[i]){gi;}}return gi;}题目解答
做快排的时候一定要注意这个left1right1条件。
376. 摆动序列
题目描述
如果连续数字之间的差严格地在正数和负数之间交替则数字序列称为摆动序列。第一个差如果存在的话可能是正数或负数。少于两个元素的序列也是摆动序列。
例如 [1,7,4,9,2,5] 是一个摆动序列因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列第一个序列是因为它的前两个差值都是正数第二个序列是因为它的最后一个差值为零。
给定一个整数序列返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些也可以不删除元素来获得子序列剩下的元素保持其原始顺序。
题目解答
int wiggleMaxLength(int* nums, int numsSize){if(numsSize1){return 1;}if(numsSize2){return nums[0]!nums[1]?2:1;}int prediff0;int curdiff0;int res1;for(int i1;inumsSize;i){curdiffnums[i]-nums[i-1];if((prediff0curdiff0)||(prediff0curdiff0)){res;prediffcurdiff;}}return res;
}
题目总结
利用摆动序列的性质一高一低就计数加一从零开始终点不算。
53. 最大子序和
题目描述
给定一个整数数组 nums 找到一个具有最大和的连续子数组子数组最少包含一个元素返回其最大和。
题目解答
int max(int a,int b){return ab?a:b;
}
int maxSubArray(int* nums, int numsSize) {int dp[numsSize];dp[0]nums[0];int resnums[0];for(int i1;inumsSize;i){dp[i]max(dp[i-1]nums[i],nums[i]);resmax(res,dp[i]);}return res;
}题目总结
用动态规划dp数组为前i项包含nums[i]的最大的连续子序列之和。