第一题:
题目:6176. 出现最频繁的偶数元素 - 力扣(LeetCode)
思路:使用数组统计每个偶数出现的次数,遍历数组保留最前面的最大值
class Solution {
public:
int mostFrequentEven(vector<int>& nums) {
int s[100010] = {0};
int n = nums.size();
for(int i = 0; i < n; i ++)
{
if(nums[i] % 2 == 0) s[nums[i]] ++;
}
int res = -1, max = 0;
for(int i = 0; i < 100010; i ++)
{
if(max < s[i])
{
max = s[i];
res = i;
}
}
return res;
}
};
第二题:
题目:6177. 子字符串的最优划分 - 力扣(LeetCode)
思路:遍历字符串,记录每一个字符出现的次数,当字符第二次出现,更新记录数组全部为0,res++,在最后的res上加1(因为最后一段子字符串不会出现重复的数来是字符串断开)。
class Solution {
public:
int partitionString(string s) {
int n = s.length();
int a[26] = {0}, res = 0;
int left = 0, right = 0;
for(int i = 0; i < n; i ++ )
{
a[s[i] - 'a' + 0] ++;
for(int j = 0; j < 26; j ++ )
{
if(a[j] == 2)
{
res ++;
i --;
for(int o = 0; o < 26; o ++)
{
a[o] = 0;
}
}
}
}
return res + 1;
}
};
第三题:
题目:6178. 将区间分为最少组数 - 力扣(LeetCode)
思路:利用差分通过前缀和的逆运算得到重复最多的区间;
int inter[1000010];
class Solution {
public:
void diff(int l ,int r)
{
inter[l] += 1;
inter[r + 1] -= 1;
}
int minGroups(vector<vector<int>>& intervals) {
memset(inter, 0, sizeof inter);
for(auto i : intervals)
{
diff(i[0], i[1]);
}
for(int i = 1; i < 1000010; i ++ ) inter[i] += inter[i - 1];
int res = 0,max_v = 0;
for(int i = 0; i < 1000010; i ++)
{
if(inter[i] > max_v) max_v = inter[i];
}
return max_v;
}
};