代码随想录算法训练营第二十六天| 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 }