第 315 场周赛
Date: 2022-10-16
A 与对应负数同时存在的最大正整数
哈希表暴力
B 反转之后不同整数的数目
翻转每个数字,用 set 维护集合即可。
C 反转之后的数字和
这题 C++ 会被卡常。另外需要注意 0 的特殊性。
D 统计定界子数组的数目
恐怕是本套题目中最值得一看的题目了。
数组会被 < minK 和 > maxK 的数字分割开,记录上一次 minK 和 maxK 的出现位置,以及上一次被分割的位置 border。那么对于当前位置作为区间右端点,左端点的合法个数就是 \(\min(lastminkpos, lastmaxkpos) - border + 1\)。
class Solution {
public:
long long countSubarrays(vector<int>& nums, int minK, int maxK) {
int last_min_k = -1;
int last_max_k = -1;
int border = 0;
long long res = 0;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] < minK || nums[i] > maxK) {
last_min_k = last_max_k = -1;
border = i + 1;
continue;
}
if (nums[i] == minK) {
last_min_k = i;
}
if (nums[i] == maxK) {
last_max_k = i;
}
if (last_min_k != -1 && last_max_k != -1) {
res += min(last_min_k, last_max_k) - border + 1;
}
}
return res;
}
};
小结
每次比赛用脚本工具去爬题目,在本地IDE写的话,网页端的账号总是会被卡掉。耽误一开始的几秒钟时间去登陆。然后今天发现 C++ 的 stoi 也无法在这个脚本工具的编译环境下使用。
T3 除了因为 C++ 卡常,还有特殊 0 的考虑。
本文访问 次