代码随想录算法训练营第二十六天| 455.分发饼干 376. 摆动序列 53. 最大子序和

455.分发饼干

自己的

思路:

先排序,然后每个孩子找到他能满足的胃口饼干,找到了之后,孩子向前,饼干向前

代码:

 1 int findContentChildren(vector<int>& g, vector<int>& s)
 2 {
 3     int result = 0;
 4     sort(g.begin(), g.end());
 5     sort(s.begin(), s.end());
 6 
 7     int i = 0, j = 0;
 8     while (i < g.size() && j < s.size())
 9     {
10         if (g[i] > s[j])
11         {
12             j++;
13         }
14         else
15         {
16             result++;
17             i++; 
18             j++;
19         }
20     }
21 
22     return result;
23 }

 376. 摆动序列 

我的:

思路:

先判断当前数组是否满足 size() == 1 2这种情况

然后在判断,当前节点和前一个,后一个的相乘是否为负数,如果不满足,就删掉当前节点,继续判断

额外知识:

vecotr erase之后,会更新Size

代码:

 1 int wiggleMaxLength(vector<int>& nums) {
 2     if (nums.size() <= 1 || (nums.size() == 2 && nums[0] != nums[1])) return nums.size();
 3     if (nums.size() == 2 && nums[0] == nums[1]) return 1;
 4 
 5     //判断当前节点是否满足 前-cur * cur-后 <0 如果不满足,则删掉,删掉之后再判断
 6 
 7     int i = 1;
 8     while (i < nums.size() - 1)
 9     {
10         if ((nums[i - 1] - nums[i]) * (nums[i] - nums[i + 1])<0)
11         {
12             i++;
13         }
14         else
15         {
16             nums.erase(nums.begin() + i);
17         }
18     }
19 
20     if (nums.size() <= 1 || (nums.size() == 2 && nums[0] != nums[1])) return nums.size();
21     if (nums.size() == 2 && nums[0] == nums[1]) return 1;
22     return nums.size();
23 }

 53. 最大子序和  

思路:

当累加的过程遇到当前和为负数的时候,从下一步开始计算

代码:

 1 int maxSubArray(vector<int>& nums) {
 2     int max_ = INT_MIN;
 3     
 4     int curSum_ = 0;
 5     for (int i = 0; i < nums.size(); i++)
 6     {
 7         curSum_ += nums[i];
 8         max_ = max_ > curSum_ ? max_ : curSum_;
 9 
10         if (curSum_ < 0)
11         {
12             curSum_ = 0;
13         }
14     }
15 
16     return max_;
17 }

 

posted @ 2023-07-07 10:14  博二爷  阅读(3)  评论(0编辑  收藏  举报