周赛情况
一个小时多完成 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
Comments NOTHING