码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Day35力扣打卡


    打卡记录

    在这里插入图片描述


    相邻字符不同的最长路径(树状DP)

    链接

    若节点也存在父节点的情况下,传入父节点参数,若是遍历到父节点,直接循环里 continue。

    class Solution:
        def longestPath(self, parent: List[int], s: str) -> int:
            n = len(parent)
            g = [[] for _ in range(n)]
            for i in range(1, n): g[parent[i]].append(i)
            ans = 0
            def dfs(x):
                nonlocal ans
                max_len = 0
                for y in g[x]:
                    length = dfs(y) + 1
                    if s[x] != s[y]:
                        ans = max(ans, max_len + length)
                        max_len = max(max_len, length)
                return max_len
            dfs(0)
            return ans + 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    三个无重叠子数组的最大和(滑动窗口)

    链接

    分段处理,类似于股票问题的一种解法,把前面出现的最大值保存下来留给后面计算来使用,这样可以避免重叠出现。

    class Solution:
        def maxSumOfThreeSubarrays(self, nums: List[int], k: int) -> List[int]:
            ans = []
            sum1, maxSum1, maxSum1Idx = 0, 0, 0
            sum2, maxSum12, maxSum12Idx = 0, 0, ()
            sum3, maxTotal = 0, 0
            for i in range(k * 2, len(nums)):
                sum1 += nums[i - k * 2]
                sum2 += nums[i - k]
                sum3 += nums[i]
                if i >= k * 3 - 1:
                    if sum1 > maxSum1:
                        maxSum1 = sum1
                        maxSum1Idx = i - k * 3 + 1
                    if maxSum1 + sum2 > maxSum12:
                        maxSum12 = maxSum1 + sum2
                        maxSUm12Idx = (maxSum1Idx, i - k * 2 + 1)
                    if maxSum12 + sum3 > maxTotal:
                        maxTotal = maxSum12 + sum3
                        ans = [*maxSUm12Idx, i - k + 1]
                    sum1 -= nums[i - k * 3 + 1]
                    sum2 -= nums[i - k * 2 + 1]
                    sum3 -= nums[i - k + 1]
            return ans
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    三个无重叠子数组的最大和(动态规划)

    链接
    DP解法的难点在于如何回溯动态规划后的坐标,而且要保持字典序最小。

    class Solution:
        def maxSumOfThreeSubarrays(self, nums: List[int], k: int) -> List[int]:
            n = len(nums)
            s = list(accumulate(nums, initial=0))
            f = [[0] * 4 for _ in range(n + 2)]
            for i in range(n - k + 1, 0, -1):
                for j in range(1, 4):
                    f[i][j] = max(f[i + 1][j], f[i + k][j - 1] + s[i + k - 1] - s[i - 1])
            ans = [0] * 3
            i, j, idx = 1, 3, 0
            while j > 0:
                if f[i + 1][j] > f[i + k][j - 1] + s[i + k - 1] - s[i - 1]: i += 1
                else:
                    ans[idx] = i - 1
                    idx += 1
                    i += k
                    j -= 1
            return ans
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    字节一面:说说var、let、const之间的区别
    gitlab配置webhook限制提交注释
    SpringBoot 项目中 对http调用异常处理
    【Pygame实战】代码版《舞动青春*炫舞》能否引领音舞游戏再一次爆发?“你还记得最浪漫的舞蹈游戏炫舞吗?”
    一周热门|比GPT-4强100倍,OpenAI有望年底发布GPT-Next;1个GPU,1分钟,16K图像
    WPF基础:在Canvas上绘制图形
    PHP将pdf转为图片后用OCR识别
    MySQL高可用方案之MHA
    介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用
    Node编写重置用户密码接口
  • 原文地址:https://blog.csdn.net/qq947467490/article/details/134492390
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号