一、分发饼干
思路很好想,和题解一致,但是一开始用while来写频繁报错,原因是while循环内要用if 和else if连接,不能用两个if连用,因为如果满足第一个if,那么会执行相应操作,执行完毕后,又带着改后的数据,再去判断第二个if是否成立,所以会报错。
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
int left=g.size()-1;
int right=s.size()-1;
int result=0;
sort(g.begin(),g.end());
sort(s.begin(),s.end());
while(left>=0&&right>=0){
if(g[left]>s[right]){
left--;
}
if(g[left]<=s[right]){
result++;
left--;
right--;
}
}
return result;
}
};
二、摆动序列
不理解 很懵 为什么题干上说了前差不等于0,后差等于0不满足,而题解中前叉等于0,后叉不等于0就满足了
先把代码誊上来吧
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if(nums.size()<=1)return nums.size();
if(nums.size()==2&&nums[0]==nums[1])return 1;
if(nums.size()==2&&nums[0]!=nums[1])return 2;
int prediff=0;
int curdiff=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;
}
};
三、最大子数组和
本题思路是,遍历数组,记录连续子数组的和,如果说连续子数组和为负值,说明这个连续的和对后面的值有负影响,所以直接删去,更新为新元素。并且,需要定义一个变量result实时更新最大值,最后返回
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int maxresult=INT32_MIN;
int sum=0;
for(int i=0;i<nums.size();i++){
if(sum<0){
sum=nums[i];
}
else{
sum+=nums[i];
}
maxresult=max(maxresult,sum);
}
return maxresult;
}
};