码农知识堂 - 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 算法刷题

  • 相关阅读:
    ceph 010 clustermap ceph调优
    植被参数光学遥感反演方法(Python)及遥感与生态模型数据同化算法技术应用
    java源码系列:HashMap底层存储原理详解——7、演示1.7底层实现原理验证-如何使用链表存储
    验证的挑战
    泛型的类型擦除后,fastjson反序列化时如何还原?
    Java23种设计模式-行为型模式之策略模式
    Java基础面向对象介绍
    P1314 [NOIP2011 提高组] 聪明的质监员
    月木学途开发 3.博客模块开发
    期货择时策略-基于Hurst指数的分型策略研究
  • 原文地址:https://blog.csdn.net/qq_38253797/article/details/126333700
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    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号