Day 31 贪心算法
455. 分发饼干
分发饼干其实有很多种写法,但是下面这种贪心的解法是最好理解,也最好解释的
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(s.begin(), s.end());
sort(g.begin(), g.end());
int cnt = 0;
auto sriter = s.rbegin();
auto griter = g.rbegin();
while (sriter != s.rend() && griter != g.rend())
{
if (*sriter >= *griter)
{
sriter++;
cnt++;
}
griter++;
}
return cnt;
}
};
我的其他解法
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(), g.end(), greater<int>());
sort(s.begin(), s.end(), greater<int>());
int cnt = 0;
for (int i = 0; i < g.size(); i++) {
if (cnt < s.size() && g[i] <= s[cnt]) {
cnt++;
}
}
return cnt;
}
};
376. 摆动序列
贪心算法
这道题用贪心算法要考虑的细节有很多。
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if (nums.size() <= 1) return nums.size();
int preDiff = 0, cnt = 1;
for (int i = 0; i < nums.size() - 1; ++i)
{
int curDiff = nums[i + 1] - nums[i];
if ((preDiff <= 0 && curDiff > 0) || (preDiff >= 0 && curDiff < 0))
{
cnt++;
preDiff = curDiff;
}
}
return cnt;
}
};
动态规划
有点难(甚至涉及到了线段树),等后面二刷的时候再来学好了
53. 最大子序和
暴力解法
超时了
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int maxSum = INT_MIN;
for (int i = 0; i < nums.size(); i++)
{
int sum = 0;
for (int j = i; j < nums.size(); j++)
{
sum += nums[j];
if (sum > maxSum)
{
maxSum = sum;
}
}
}
return maxSum;
}
};
贪心算法
贪心算法的代码写起来简单明了。文章来源:https://www.toymoban.com/news/detail-610657.html
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int maxSum = INT_MIN, sum = 0;
for (int i = 0; i < nums.size(); ++i)
{
sum += nums[i];
if (sum > maxSum)
{
maxSum = sum;
}
if (sum < 0) // 这一步是贪心的关键
{
sum = 0;
}
}
return maxSum;
}
};
动态规划
感觉内核跟贪心一样,只是实现起来比较绕一点。文章来源地址https://www.toymoban.com/news/detail-610657.html
class Solution {
public:
int maxSubArray(vector<int>& nums) {
if (nums.size() == 0) return 0;
vector<int> dp(nums.size(), 0);
dp[0] = nums[0];
int result = nums[0];
for (int i = 1; i < nums.size(); ++i)
{
dp[i] = max(dp[i - 1] + nums[i], nums[i]);
if (dp[i] > result)
{
result = dp[i];
}
}
return result;
}
};
到了这里,关于算法刷题Day 31 分发饼干+摆动序列+最大子序列和的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!