455.分发饼干
题目链接:力扣
看见题目的第一想法:
这道题是贪心的第一道,算是先了解贪心是如何解题的把,总之一句话:局部最优达到全局最优
class Solution { public: int findContentChildren(vector<int>& g, vector<int>& s) { sort(g.begin(), g.end()); sort(s.begin(), s.end()); int result = 0; for(int i = g.size()-1, j = s.size()-1; i >= 0; i--) { if(j >= 0 && g[i] <= s[j]) { result++; j--; } } return result; } };
遇到的困难:
问题不是很大
376.摆动序列
题目链接:力扣
看见题目的第一想法:
这道题有点难度,虽然想法很简单,在遍历的时候遇到前后出现峰值的时候就让结果加一,但是实现起来还是很麻烦
class Solution { public: int wiggleMaxLength(vector<int>& nums) { int result = 1; int preDiff = 0; int curDiff; for(int i = 1; i < nums.size(); i++) { curDiff = nums[i]-nums[i-1]; if((curDiff > 0 && preDiff <= 0) || (curDiff < 0 && preDiff >= 0)) { result++; preDiff = curDiff; } } return result; } };
遇到的困难:
对于贪心的不熟悉把,在实现上没有什么思路
53.最大子数组和
题目链接:力扣
看见题目的第一想法:
这题一看使用贪心就应该可以实现,经历了思考还是实现了出来
class Solution { public: int maxSubArray(vector<int>& nums) { // 基本思路:从头遍历数组,让每次遍历时算出其值必须为遍历过的和最大,如果小于0就算0,局部最大成为全局最大 if(nums.size() == 1) { return nums[0]; } int preNum = 0; int curNum = 0; int result = INT_MIN; for(int i = 0; i < nums.size(); i++) { curNum += nums[i]; result = max(result, curNum); if(curNum < 0) { curNum = 0; } } return result; } };
遇到的困难:
在处理正数的时候没有太大问题,但在处理负数的时候,一开始是把result = max(result, curNum);写在了if后面,但这样最小的就是0,不能满足最大值为负的情况,后来想了想将result放在if前面就可以解决这个问题了