- 算术三元组的数目
- 受限条件下可到达节点的数目
- 检查数组是否存在有效划分
- 最长理想子序列(代补)
- 总结
算术三元组的数目
简单题,一遍 遍历结束
class Solution:
def arithmeticTriplets(self, nums: List[int], diff: int) -> int:
res, s = 0, {}
for x in nums:
if s.get(x-diff) and s.get(x-2*diff):
res += 1
s[x]=1
return res
受限条件下可到达节点的数目
存储道路数据,之后使用bfs遍历,受限制的道路可以加入vis数组来加速程序运行速度
做的时候本来想仿照c++用queue存储数据的,后来发现python的list已经有queue的功能在里面了
class Solution:
def reachableNodes(self, n: int, edges: List[List[int]], restricted: List[int]) -> int:
vis = [0 for _ in range(n)]
for rest in restricted:
vis[rest]=1
node =[[]for _ in range(n)]
for u,v in edges:
node[u].append(v)
node[v].append(u)
res =0
q=[0]
while q:
tar=q.pop(0)
res+=1
vis[tar]=1
for temp in node[tar]:
if vis[temp]==0:
q.append(temp)
return res
检查数组是否存在有效划分
经典的dp问题,但是过了这么久都没写题的我当时完全没想到dp,想着能不能模拟,然后挂了
class Solution:
def taskSchedulerII(self, tasks: List[int], space: int) -> int:
res=1
vis={}
vis[tasks[0]]=1
for i in range(1,len(tasks)):
if vis.get(tasks[i]) and res-vis[tasks[i]]<=space:
res = vis[tasks[i]]+space+1
vis[tasks[i]]=res
else:
res += 1
vis[tasks[i]]=res
return res
最长理想子序列(代补)
同样也是dp问题,但看了大佬的题解还是有点没懂,先放在这边
总结
总结一下,最近多去摸摸dp问题,找回一些手感(感觉每次时间一长我就有点忘了dp这种解决思路)



