第 336 场周赛
2586. 统计范围内的元音字符串数
cpp
class Solution {
public:
int vowelStrings(vector<string>& words, int left, int right) {
int res = 0;
for (int i = left; i <= right; ++i) {
int last = (int)words[i].size() - 1;
if ((words[i][0] == 'a' || words[i][0] == 'e' ||
words[i][0] == 'i' || words[i][0] == 'o' ||
words[i][0] == 'u') &&
(words[i][last] == 'a' || words[i][last] == 'e' ||
words[i][last] == 'i' || words[i][last] == 'o' ||
words[i][last] == 'u'))
res++;
}
return res;
}
};
2587. 重排数组以得到最大前缀分数
cpp
class Solution {
public:
int maxScore(vector<int>& nums) {
sort(nums.begin(), nums.end());
long long sum = 0;
for (int i = 0; i < nums.size(); ++i) sum += nums[i];
int res = (int)nums.size();
while (res > 0 && sum <= 0) {
sum -= nums[nums.size() - res];
--res;
}
return res;
}
};
2588. 统计美丽子数组数目
TODO 使用位集合优化空间复杂度。
cpp
class Solution {
public:
long long beautifulSubarrays(vector<int>& nums) {
vector<int> prefix_xor = {0};
for (auto beg = nums.cbegin(); beg != nums.cend(); ++beg)
prefix_xor.push_back(prefix_xor.back() ^ *beg);
unordered_map<int, int> xor_map;
long long res = 0;
for (auto beg = prefix_xor.cbegin(); beg != prefix_xor.cend(); ++beg)
res += xor_map[*beg]++;
return res;
}
};
Python 一行:
python
class Solution:
def beautifulSubarrays(self, nums: List[int]) -> int:
return sum(a*(a-1) for a in Counter(accumulate(nums, xor, initial=0)).values()) >> 1