码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • [LeetCode周赛复盘] 第 305 场周赛20220807


    [LeetCode周赛复盘] 第 305 场周赛20220807

      • 一、本周周赛总结
      • 二、 [Easy] 6136. 算术三元组的数目
        • 1. 题目描述
        • 2. 思路分析
        • 3. 代码实现
      • 三、[Medium] 6139. 受限条件下可到达节点的数目
        • 1. 题目描述
        • 2. 思路分析
        • 3. 代码实现
      • 四、[Medium] 6137. 检查数组是否存在有效划分
        • 1. 题目描述
        • 2. 思路分析
        • 3. 代码实现
      • 五、[Hard] 6138. 最长理想子序列
        • 1. 题目描述
        • 2. 思路分析
        • 3. 代码实现

    一、本周周赛总结

    • T3写dfs一百多行做大牢,最后十分钟改dp过的。
    • 看来我分数稳定了,掉大分。
      在这里插入图片描述

    二、 [Easy] 6136. 算术三元组的数目

    链接: 6136. 算术三元组的数目

    1. 题目描述

    在这里插入图片描述

    2. 思路分析

    定级Easy。
    由于数字不重复(严格递增),因此可以利用哈希表达到线性复杂度。

    • 先把数字映射到下标。
    • 然后枚举每个数字作为i,计算j、k,检查jk是否在数组里且满足下表大小。

    3. 代码实现

    class Solution:
        def arithmeticTriplets(self, nums: List[int], diff: int) -> int:
            n = len(nums)
            t = {v:i for i,v in enumerate(nums)}
                
            ans = 0
            for i,v in enumerate(nums):
                a,b = v +diff,v+2*diff
                if a in t and b in t and i<t[a]<t[b]:
                    ans += 1
            return ans
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    三、[Medium] 6139. 受限条件下可到达节点的数目

    链接: 6139. 受限条件下可到达节点的数目

    1. 题目描述

    在这里插入图片描述

    2. 思路分析

    定级Medium。
    比较裸,建图的时候去掉受限节点,然后从0开始,floodfill。
    最后返回搜索到的节点个数。

    3. 代码实现

    class Solution:
        def reachableNodes(self, n: int, es: List[List[int]], restricted: List[int]) -> int:
            r = set(restricted)
            g = defaultdict(list)
            for u,v in es:
                if u not in r and v not in r:
                    g[u].append(v)
                    g[v].append(u)
            
            vis = set()
            
            def dfs(u):
                vis.add(u)
                for v in g[u]:
                    if v not in vis:
                        dfs(v)
            
            dfs(0)
            return len(vis)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    四、[Medium] 6137. 检查数组是否存在有效划分

    链接: 6137. 检查数组是否存在有效划分

    1. 题目描述

    在这里插入图片描述

    2. 思路分析

    定级Medium。
    很难,一开始写栈+回溯坐大牢。

    • 实际用dp好做一些。
    • 令dp[i]为以i为结尾的前缀串是否合法。
    • 那么只有当最后2个或三个字符合法,且前边串合法的情况下,dp[i]==True。
    • 仔细判断即可。

    3. 代码实现

    class Solution:
        def validPartition(self, nums: List[int]) -> bool:
            st = []
            n = len(nums)
            dp = [False] * n
            if nums[0] == nums[1]:
                dp[1] = True
            for i in range(2,n):
                v = nums[i]
                if v == nums[i-1] and dp[i-2]:
                    dp[i] = True
                    continue
                if v == nums[i-1] == nums[i-2] and (i-2==0 or dp[i-3] ):
                    dp[i] = True
                    continue
                # print(i,nums[i-1]+1 , nums[i-2]+2 ,i-2,dp[i-3])
                if v == nums[i-1]+1 == nums[i-2]+2 and(i-2==0 or dp[i-3]):
                    dp[i] = True
                    continue
                # print(dp)
            return dp[n-1]                
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    五、[Hard] 6138. 最长理想子序列

    链接: 6138. 最长理想子序列

    1. 题目描述

    在这里插入图片描述

    2. 思路分析

    定级Hard。
    想了半天LIS其实不对,这题可以直接DP。开一个长度26的dp数组。

    • dp[i]代表字符以i为结尾的前缀合法串长度。
    • 从前向后枚举s,如果当前字符是v,那么它可以从前边[v-k,v+k]转移而来,即:
    • dp[v] = max{dp[j]+1|j∈[v-k,v+k]},注意边界[0,25]。
    • 实现时,可以先把s转换成数字方便处理。

    3. 代码实现

    class Solution:
        def longestIdealString(self, s: str, k: int) -> int:
            s = [ord(c)-ord('a') for c in s]
            dp = [0] *26
            for i,v in enumerate(s):            
                dp[v] = max(dp[j]+1 for j in range(max(0,v-k),min(25,v+k)+1))
                    
            return max(dp)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    [数据结构] - 顺序表与链表详解
    利用人工智能打破应试教育惯性促进学生思维活化与创新能力培养的研究
    Word Embedding与Word2Vec学习
    鉴源论坛丨信号基础设备概述
    SpringBoot的作用
    【JavaScript】掌握BOM浏览器对象模型
    SpringBoot+Vue 的网上图书商城管理系统
    Spark 离线开发框架设计与实现
    网上最全的套接字socket
    计算机图形学中的曲线问题——贝塞尔曲线的绘制
  • 原文地址:https://blog.csdn.net/liuliangcan/article/details/126209207
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号