算法刷题记录 Day27
Date: 2024.03.22
lc 53. 最大子数组和
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int res = 0;
int maxx = INT_MIN;
for(int i=0; i<nums.size(); i++){
res += nums[i];
maxx = max(maxx, res); // 存储当前的最大值
// cout<<"maxx:"<<maxx<<endl;
if(res < 0){
res = 0;
}
}
return maxx;
}
};
lc 376. 摆动序列
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if(nums.size() == 1)
return 1;
if(nums.size() == 2){
if(nums[0] == nums[1])
return 1;
else
return 2;
}
int max_len = 1;
// 相当于将连续递减的元素舍去
int flag = -1;
for(int i=1; i<nums.size(); i++){
if(flag == -1){
if(nums[i] == nums[i-1])
continue;
else{
if(nums[i] > nums[i-1])
flag = 1; //比前一个大
else
flag = 0;
max_len++;
}
}
else{
if(flag == 1 && nums[i] < nums[i-1]){
max_len++;
flag = 0;
}
else if(flag == 1){
continue;
}
else if(flag == 0 && nums[i] > nums[i-1]){
max_len++;
flag = 1;
}
else{
continue;
}
}
}
return max_len;
}
};
lc 455. 分发饼干
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
//从胃口小的孩子开始,尽量喂最接近但大于等于其胃口的饼干。
int res = 0;
sort(g.begin(), g.end());
sort(s.begin(), s.end());
int p1=0, p2=0;
while(p1 < g.size() && p2 < s.size()){
//1. 当前饼干大于等于孩子的胃口,喂给他,res++, p1++, p2++;
if(g[p1] <= s[p2]){
res++;
p1++;
p2++;
}
//2. 如果当前饼干小于孩子胃口,指向下一块饼干
else{
p2++;
}
}
return res;
}
};