2023 年第 11 周总结

发布于 2023-03-12  93 次阅读


周赛情况

34 分钟完成 3 题,0 WA 。第四题没什么思路。

6315. 统计范围内的元音字符串数

简单题

class Solution:
    def vowelStrings(self, words: List[str], left: int, right: int) -> int:
        return sum(word[0] in ['a', 'e', 'i', 'o', 'u'] and word[-1] in ['a', 'e', 'i', 'o', 'u'] for word in words[left:right+1])

6316. 重排数组以得到最大前缀分数

要前缀和中正数最多,只要按正数、0、负数的顺序排好就行,即降序排列。

class Solution:
    def maxScore(self, nums: List[int]) -> int:
        nums.sort(reverse=True)
        ans = 0
        if nums[0] <= 0:
            return 0
        p_sum = 0
        for num in nums:
            p_sum += num
            if p_sum > 0:
                ans += 1
        return ans

6317. 统计美丽子数组数目

花了二十分钟看出来问题,如果子数组异或和为 0 ,则为美丽子数组。那么我们可以参考前缀和,定义前缀异或和。而前缀异或和中存在相同元素时,说明其间的一段子数组异或和为 0 。那么只要遍历前缀异或和数组即可。

class Solution:
    def beautifulSubarrays(self, nums: List[int]) -> int:
        p_xor = []
        cur = 0
        for num in nums:
            cur ^= num
            p_xor.append(cur)
        cnt = Counter()
        cnt[0] = 1  # 0 默认计数为 1
        ans = 0
        for num in p_xor:
            ans += cnt[num]
            cnt[num] += 1
        return ans