题目来源于知识星球—英雄算法联盟,六月算法集训专题
目录
前言
跟随英雄算法联盟博主—英雄哪里出来,每天完成相应的算法练习,一个月后,必定会有所成长!
一、1984.学生分数的最小差值(简单)
1.题目描述
2.解题思路
首先将数组进行升序排列,K为滑动窗口的大小,在固定区间大小为K的情况下,
计算最小的差值。
3.代码演示(C++)
class Solution
{
public:
int minimumDifference(vector<int>& nums, int k)
{
int sum=999999;
sort(nums.begin(),nums.end());
for(int i=0;i+k-1<nums.size();i++)
{
sum=min(nums[i+k-1]-nums[i],sum);
}
return sum;
}
};
4.题目链接
二、1763.最长的美好子字符串(简单)
1.题目描述
2.解题思路
题中的关于美好子字符串的定义为字符串中的字母的大小写均出现在该字符串中,
因此可以用lower来标记小写字母,upper来标记大写字母,如果lower=upper,那
么就是美好字符串。
3.代码演示(C++)
class Solution
{
public:
string longestNiceSubstring(string s)
{
int n = s.size();
int maxPos = 0;
int maxLen = 0;
for (int i = 0; i < n; ++i)
{
int lower = 0;
int upper = 0;
for (int j = i; j < n; ++j)
{
if (islower(s[j]))
{
lower |= 1 << (s[j] - 'a');
}
else
{
upper |= 1 << (s[j] - 'A');
}
if (lower == upper && j - i + 1 > maxLen)
{
maxPos = i;
maxLen = j - i + 1;
}
}
}
return s.substr(maxPos, maxLen);
}
};
4.题目链接
三、2269.找到一个数字的K美丽值(简单)
1.题目描述
2.解题思路
用字符串s来表示num的十进制表示,从左到右进行枚举长度为k的字符串,如果子串对应的整数能够被num整除,计数器++。
3.代码演示(C++)
class Solution
{
public:
int divisorSubstrings(int num, int k)
{
string s = to_string(num);
int n = (int)s.size();
int res = 0;
for (int i = 0; i < n - k + 1; i ++)
{
int cur = stoi(s.substr(i, k));
if (cur != 0 && num % cur == 0)
{
res ++;
}
}
return res;
}
};
4.题目链接
四、995.K连续位的最小翻转次数(困难)
1.题目描述
2.解题思路
先记录一下,有机会再看看!
3.代码演示(C++)
4.题目链接
总结
每天跟随英雄哥学习相关的算法,一个月会收获很多,如果你想了解更多关于知识星球的内容,欢迎联系我!