本文主要是介绍代码随想录训练营Day31,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、分发饼干
- 二、摆动序列
- 三、最大子树组合
前言
今天是跟着代码随想录刷题的第31天,主要学习了分发饼干,摆动序列和最大子树组合这三个题目。
一、分发饼干
思路:就是大的东西给大孩子,小东西给小孩子
代码:
class Solution {
public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(),g.end());sort(s.begin(),s.end());int j=s.size()-1;int result=0;for(int i=g.size()-1;i>=0;i--){if(j>=0&&s[j]>=g[i]){result++;j--;}}return result;}
};
二、摆动序列
思路:我直接先去重,当然我这个去重去的是连续的重复而不是所谓的去重,只要这一个和上一个不一样,我就放到新数组里,如果一样我就不放,然后后面这样看这一个和上一个的差与下一个与这一个的差是不是符号相反,相反,结果就加1,当然第一个和最后一个是必有的,所以reuslt的初始值直接设成2就可以了。
代码:
class Solution {
public:int wiggleMaxLength(vector<int>& nums) {vector<int> nums1;for(int i=0;i<nums.size();i++){if(i>0&&nums[i]==nums[i-1]) continue;nums1.push_back(nums[i]);}if(nums1.size()==0||nums1.size()==1||(nums1.size()==2)) return nums1.size();int result=2;for(int i=1;i<nums1.size()-1;i++){if((nums1[i]-nums1[i-1])*(nums1[i+1]-nums1[i])<0) result++;}return result;}
};
三、最大子树组合
思路:这题暴力会超时,所以用贪心,如果我现在的和是负数,那么我加上我后面的数就是负优化,所以直接用前面的数字当做起点重新开始出发,因为要考虑到有可能都是负数,所以最大值的取值放在判断前面。
class Solution {
public:int result=0;int max1=INT_MIN;int maxSubArray(vector<int>& nums) {for(int i=0;i<nums.size();i++){result=result+nums[i];max1=max(result,max1);if(result<0){result=0;continue;}}return max1;}
};
这篇关于代码随想录训练营Day31的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!