栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

leetcode 第 305 场周赛

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode 第 305 场周赛

第 305 场周赛 总结
  • 算术三元组的数目
  • 受限条件下可到达节点的数目
  • 检查数组是否存在有效划分
  • 最长理想子序列(代补)
  • 总结




算术三元组的数目

简单题,一遍 遍历结束

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这种解决思路)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1037878.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号