2023 年第 12 周总结

发布于 2023-03-19  92 次阅读


周赛情况

一个小时多完成 3 题。

第三题耗了一个小时,状态压缩硬是超时。再看第四题,发现这个倒是挺简单。最后排名 1600+,预期分数没变化。

要是上周不 unrate,这周再先做四再看 3,估计就上 knight 了……

6319. 奇偶位数

简单题

class Solution:
    def evenOddBit(self, n: int) -> List[int]:
        ans = [0, 0]
        cur = 0
        while n:
            if (n & 1) == 1:
                ans[cur] += 1
            n >>= 1
            cur = (cur + 1) % 2
        return ans

6322. 检查骑士巡视方案

其实就是逐步检查移动是否合法,先遍历一遍,把每一步记录下就行。被初始位置不在 (0, 0) 的情况阴了一下。

class Solution:
    def checkValidGrid(self, grid: List[List[int]]) -> bool:
        if grid[0][0] != 0:
            return False
        n = len(grid)
        mapping = {grid[row][col]: (row, col) for row in range(n) for col in range(n)}
        for idx in range(1, n * n):
            row_var = abs(mapping[idx][0] - mapping[idx - 1][0])
            col_var = abs(mapping[idx][1] - mapping[idx - 1][1])
            if (row_var == 2 and col_var == 1) or (row_var == 1 and col_var == 2):
                continue
            else:
                return False
        return True

6321. 执行操作后的最大 MEX

缺失的数,最小是 0 ,最大是数组长度。

实际上,对于元素 x ,用 value 总能把 x 变为任意与 x 同余的数。

所以只要统计数组中所有元素的余数的数目,然后遍历 0 到数组长度,看剩下的余数够不够凑出当前缺失的值即可。

class Solution:
    def findSmallestInteger(self, nums: List[int], value: int) -> int:
        n = len(nums)
        cnt = Counter()
        for idx in range(n):
            nums[idx] = nums[idx] % value
            cnt[nums[idx]] += 1
        ans = 0
        nums.sort()
        for ans in range(n):
            if cnt[ans % value]:
                cnt[ans % value] -= 1
                ans += 1
            else:
                break
        return ans