记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步
目录
11/18 661. 图片平滑器
遍历每一个点 统计九个位置是否满足
python
def imageSmoother(img):
"""
:type img: List[List[int]]
:rtype: List[List[int]]
"""
pos = [(-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(0,0),(1,-1),(1,0),(1,1)]
m,n = len(img),len(img[0])
ret = [[0]*n for _ in range(m)]
for i in range(m):
for j in range(n):
num = 0
v = 0
for x,y in pos:
newi,newj = i+x,j+y
if 0<=newi<m and 0<=newj<n:
num+=1
v += img[newi][newj]
ret[i][j] = v//num
return ret
11/19 3243. 新增道路查询后的最短距离 I
dp[i]记录从0到i的最短距离
f[i]记录额外边终点是i的起点列表
python
def shortestDistanceAfterQueries(n, queries):
"""
:type n: int
:type queries: List[List[int]]
:rtype: List[int]
"""
f=[[] for _ in range(n)]
dp=list(range(n))
ans = []
for l,r in queries:
f[r].append(l)
if dp[l]+1<dp[r]:
dp[r]=dp[l]+1
for i in range(r+1,n):
minv = float("inf")
for j in f[i]:
minv = min(minv,dp[j])
dp[i]=min(dp[i],dp[i-1]+1,minv+1)
ans.append(dp[-1])
return ans
11/20 3244. 新增道路查询后的最短距离 II
不包含两条交叉的单向通道
新增一条单向通道
如果被已考虑的单向通道包含 则不会使路径变短
否则 去掉被包含的单向通道 将该通道加入最短路径
roads记录最短路径的单向通道 roads[i]=j 表示从i到j有一条单向通道
新增道路(i,j)
如果road[i]=-1 说明选择该道路不会减少路径忽略
python
def shortestDistanceAfterQueries(n, queries):
"""
:type n: int
:type queries: List[List[int]]
:rtype: List[int]
"""
road=[i+1 for i in range(n)]
ans = []
dist = n-1
for q in queries:
k = road[q[0]]
road[q[0]]=q[1]
while k!=-1 and k<q[1]:
road[k],k=-1,road[k]
dist-=1
ans.append(dist)
return ans
11/21 3248. 矩阵中的蛇
题目已知在边界内活动
模拟每一个步骤
up -n
right +1
down +n
left -1
python
def finalPositionOfSnake(n, commands):
"""
:type n: int
:type commands: List[str]
:rtype: int
"""
cur = 0
for c in commands:
if c=="UP":
cur-=n
elif c=="DOWN":
cur+=n
elif c=="RIGHT":
cur+=1
else:
cur-=1
return cur
11/22 3233. 统计不是特殊数字的数字数量
根据题意 质数的平方数是特殊数字
埃氏筛遍历所有质数的平方是否在区间内
python
def nonSpecialCount(l, r):
"""
:type l: int
:type r: int
:rtype: int
"""
import math
n=int(math.sqrt(r))
v = [0]*(n+1)
ans = r-l+1
for i in range(2,n+1):
if v[i]==0:
if l<=i*i<=r:
ans-=1
for j in range(i*2,n+1,i):
v[j]=1
return ans
11/23
python
11/24
python