码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Leetcode周赛306】6148、6149、6150、6151


    目录

    • 前言
    • 一、Leetcode6148. 矩阵中的局部最大值(easy)
    • 二、Leetcode6149. 边积分最高的节点(Middle)
    • 三、Leetcode6150. 根据模式串构造最小数字(Middle)
    • 四、Leetcode6151. 统计特殊整数(hard)
    • Reference

    前言

    前前后后也刷了200多道题了,今天参加了一下这周(2022-8-14)的周赛,前三道题做的还可以,虽然磕磕碰碰但是后面都写出来了。最后一题比较难,因为之前没写过数位DP的题目,所以有点懵逼。这里记录一下…

    希望以后可以坚持打打周赛。

    我对自己的要求,就是每次必须作对前三道。第四道 hard 有时候会很变态,不强求。

    一、Leetcode6148. 矩阵中的局部最大值(easy)

    Leetcode6148. 矩阵中的局部最大值

    遍历就可以

    class Solution:
        def largestLocal(self, grid: List[List[int]]) -> List[List[int]]:
            n = len(grid)
            res = [[0 for _ in range(n-2)]for _ in range(n-2)]
            for i in range(1, n-1):
                for j in range(1, n-1):
                    for x in range(i-1, i+2):
                        for y in range(j-1, j+2):
                            res[i-1][j-1] = max(res[i-1][j-1], grid[x][y])
            return res
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    二、Leetcode6149. 边积分最高的节点(Middle)

    Leetcode6149. 边积分最高的节点

    也是遍历就可以

    class Solution:
        def edgeScore(self, edges: List[int]) -> int:
            n = len(edges)   # n个节点  edges[i]表示i->edges[i]
            # 统计指向某个节点i的节点编号总合和
            res = [0 for _ in range(n)]   # res[i]表示节点i的入度编号总和
            max_v = 0
            for i in range(n):
                res[edges[i]] += i
                max_v = max(res[edges[i]], max_v)
            for i in range(len(res)):
                if res[i] == max_v: return i
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    三、Leetcode6150. 根据模式串构造最小数字(Middle)

    Leetcode6150. 根据模式串构造最小数字

    dfs,这道题有点复杂

    class Solution:
        def smallestNumber(self, pattern: str) -> str:
            def dfs(path, idx, mapp):
                if idx == len(pattern):
                    a = ''.join(path)
                    # print(a)
                    if len(self.res) == 0: self.res = a
                    else:
                        if a < self.res: self.res = a
                    return 
                for num in mapp:
                    if pattern[idx] == 'I':
                        if num > int(path[-1]):
                            path.append(str(num))
                            mapp.remove(num)
                            dfs(path, idx+1, mapp)
                            mapp.add(num)
                            path.pop()
                    elif pattern[idx] == 'D':
                        if num < int(path[-1]):
                            path.append(str(num))
                            mapp.remove(num)
                            dfs(path, idx+1, mapp)
                            mapp.add(num)
                            path.pop()
            n = len(pattern)
            path, self.res = [], ""
            mapp = set()
            for i in range(1, 10): mapp.add(i)
                
            for k in range(1, 10):
                mapp.remove(k)
                path.append(str(k))
                dfs(path, 0, mapp)
                path.pop()
                mapp.add(k)
            return self.res
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    四、Leetcode6151. 统计特殊整数(hard)

    Leetcode6151. 统计特殊整数

    数位DP,这道题我没做出来,之前没做过数位DP的内容,拿到题有点懵逼

    讲道理这种题这种题面试是不太可能出的,笔试有可能。有点难…

    class Solution:
        def countSpecialNumbers(self, n: int) -> int:
            # 数位DP
            s = str(n)  
            @cache
            def f(i, mask, is_limit, is_num):
                if i == len(s): return int(is_num)
                res = 0
                if not is_num:
                    res = f(i+1, mask, False, False)
                up = int(s[i]) if is_limit else 9
                for d in range(1-int(is_num), up+1):
                    if mask >> d & 1==0:
                        res += f(i+1, mask|(1<<d), is_limit and d == up, True)
                return res
            return f(0, 0, True, False)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    Reference

    【力扣周赛 306】数位 DP | LeetCode 算法刷题

  • 相关阅读:
    vue - Vue路由(扩展)
    基础shell小技巧004
    CHS零壹视频恢复程序OCR使用方法
    云服务器玲琅满目的时代,为什么我独爱Amazon EC2 云服务器?
    java解析生成定时Cron表达式工具类
    C# 窗体设计中 调用 控制台输出
    效率提升 100%,YRCloudFile 让自动驾驶安全更有保障
    SpringBoot的约定优于配置,SpringBoot解决了哪些问题?
    【Vue】Provide,Inject,模版 Ref 的用法
    【2023高教社杯数学建模国赛】ABCD题 问题分析、模型建立、参考文献及实现代码
  • 原文地址:https://blog.csdn.net/qq_38253797/article/details/126333700
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号