题目来源于知识星球—英雄算法联盟,七月算法集训专题
目录
前言
跟随英雄算法联盟博主—英雄哪里出来,每天完成相应的算法练习,一个月后,必定会有所成长!
一、643.子数组最大平均数I (简单)
1.题目描述
2.解题思路
代码来源于官方题解。将每个长度为K的子数组分别求和再计算平均值会使复杂度
过高,无法通过。
3.代码演示(C++)
class Solution
{
public:
double findMaxAverage(vector<int>& nums, int k)
{
int sum = 0;
int n = nums.size();
for (int i = 0; i < k; i++)
{
sum += nums[i];
}
int maxSum = sum;
for (int i = k; i < n; i++)
{
sum = sum - nums[i - k] + nums[i];
maxSum = max(maxSum, sum);
}
return static_cast<double>(maxSum) / k;
}
};
4.题目链接
二、718.最长重复子数组(中等)
1.题目描述
2.解题思路
利用dp[i][j]表示以nums1[i]和nums2[j]结尾的最长公共子串的长度。
然后根据nums1[i]和nums2[j]的实际情况以及dp[i-1][j-1]的值递推。
3.代码演示(C++)
class Solution
{
int dp[1010][1010];
public:
int findLength(vector<int>& nums1, vector<int>& nums2)
{
int n = nums1.size();
int m = nums2.size();
int maxv = 0;
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < m; ++j)
{
if(!i || !j)
{
dp[i][j] = (nums1[i] == nums2[j]) ? 1 : 0;
}
else
{
dp[i][j] = (nums1[i] == nums2[j]) ? dp[i-1][j-1] + 1 : 0;
}
maxv = max(maxv, dp[i][j]);
}
}
return maxv;
}
};
4.题目链接
三、978.最长湍流子数组(中等)
1.题目描述
2.解题思路
按照题意分步骤判断即可。
3.代码演示(C++)
class Solution
{
public:
int maxTurbulenceSize(vector<int>& arr)
{
int ans = 0;
int aec[40010], des[40010];
for(int i = 0; i < arr.size(); ++i)
{
aec[i] = des[i] = 1;
if(i)
{
if(arr[i] > arr[i-1])
{
aec[i] = des[i-1] + 1;
}
if(arr[i] < arr[i-1])
{
des[i] = aec[i-1] + 1;
}
}
ans = max(ans, max(aec[i], des[i]));
}
return ans;
}
};
4.题目链接
四、1052.爱生气的书店老板(中等)
1.题目描述
2.解题思路
这道题以前好像做过
3.代码演示(C++)
class Solution
{
public:
int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int minutes)
{
int total = 0;
int n = customers.size();
for (int i = 0; i < n; i++) {
if (grumpy[i] == 0) {
total += customers[i];
}
}
int increase = 0;
for (int i = 0; i < minutes; i++) {
increase += customers[i] * grumpy[i];
}
int maxIncrease = increase;
for (int i = minutes; i < n; i++) {
increase = increase - customers[i - minutes] * grumpy[i - minutes] + customers[i] * grumpy[i];
maxIncrease = max(maxIncrease, increase);
}
return total + maxIncrease;
}
};
4.题目链接
总结
每天跟随英雄哥学习相关的算法,一个月会收获很多,如果你想了解更多关于知识星球的内容,欢迎联系我!