Skip to content

第 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

2589. 完成所有任务的最少时间