【力扣hot100】刷题笔记Day25

前言

  • 这几天搞工作处理数据真是类似我也,还被老板打电话push压力有点大的,还好搞的差不多了,明天再汇报,赶紧偷闲再刷几道题(可恶,被打破连更记录了)
  • 这几天刷的是动态规划,由于很成体系不适合零散刷,还是把代码随想录动态规划部分的题目快速再过一遍,代码简单但是思路也要记住

139. 单词拆分 - 力扣(LeetCode)

  • 动态规划

    • class Solution:def wordBreak(self, s: str, wordDict: List[str]) -> bool:s_length = len(s)dp = [False] * (s_length + 1)   # dp[i]表示s[0:i]能否被拼接dp[0] = True                    # 初始化,空字符串可以for i in range(1, s_length+1):  # 遍历结束指针ifor j in range(i):          # 遍历开始指针jif dp[j] and s[j:i] in wordDict:  # 如果j-1已经可拼,s[j:i]可再拼一个dp[i] = True        # 整体就可以拼接break               # 找到一组拼接,更新为True就退出return dp[s_length]

 300. 最长递增子序列 - 力扣(LeetCode)

  • 动态规划

    • class Solution:def lengthOfLIS(self, nums: List[int]) -> int:n = len(nums)  # dp[i]表示以nums[i]结尾的最长递增子串长度dp = [1] * n   # 初始化为全1,子串至少为1个res = 1  # 结果先取1for i in range(1, n):for j in range(i):if nums[i] > nums[j]:  # 只要比前面的递增,子串长度+1dp[i] = max(dp[i], dp[j] + 1)res = max(res, dp[i])  # 更新最长值return res

152. 乘积最大子数组 - 力扣(LeetCode)

  • 动态规划

    • class Solution:def maxProduct(self, nums: List[int]) -> int:n = len(nums)dp_max = [float('-inf')] * n  # 表示以nums[i]为底的连续子数组的最大乘积,也可以用pre_max一个变量表示dp_min = [float('inf')] * n  # 表示以nums[i]为底的连续子数组的最小乘积,也可以用pre_min一个变量表示dp_max[0] = dp_min[0] = res = nums[0]for i in range(1, n):# 由于当前可能正可能负,三种取最大/小:当前数,前最大×当前数,前最小×当前数dp_max[i] = max(nums[i], dp_max[i-1] * nums[i], dp_min[i-1] * nums[i])dp_min[i] = min(nums[i], dp_max[i-1] * nums[i], dp_min[i-1] * nums[i])res = max(res, dp_max[i])return res
  • 符号个数

    • 思路参考题解及评论区
    • class Solution:def maxProduct(self, nums: List[int]) -> int:reverse_nums = nums[::-1]# 先按照0分成多个数组,在不同数组里统计奇数个数# 负数个数为偶数,全部相乘,负数个数为奇数,某奇数的前缀乘积或后缀乘积为最大值for i in range(1, len(nums)):nums[i] *= nums[i - 1] or 1   # 前缀乘积(遇到0就重置)reverse_nums[i] *= reverse_nums[i - 1] or 1  # 后缀乘积(遇到0就重置)return max(nums + reverse_nums)  # 一定是前缀乘积和后缀乘积的最大值

416. 分割等和子集 - 力扣(LeetCode)

  • 01背包

    • class Solution:def canPartition(self, nums: List[int]) -> bool:numSum = sum(nums)if numSum % 2 == 1: return False  # 总和为奇数无法等分target = numSum // 2  # 01背包大小dp = [0] * (target + 1)  # dp[j]表示以j为容量的背包装的最大价值for i in range(len(nums)):  # 遍历物品,从头到尾,重量和价值都为nums[i]for j in range(target, nums[i] - 1, -1):  # 遍历背包,从target到nums[i]倒序dp[j] = max(dp[j], dp[j - nums[i]] + nums[i])return dp[target] == target  # 如果target容量的背包刚好能装价值为target,找到分割方法

32. 最长有效括号 - 力扣(LeetCode)

  • 辅助栈

    • 参考题解
    • class Solution:def longestValidParentheses(self, s: str) -> int:st = []  # 栈中存储的是到当前位置暂时不可以构成括号的索引res = 0for i in range(len(s)):# 可以构成括号:栈不空 and 当前字符为'(' and 栈顶字符为'('if st and s[i] == ')' and s[st[-1]] == '(':st.pop()   # 弹出栈顶'('# 与最远不能构成括号的下标计算距离,更新最大长度,注意越界res = max(res, i - (st[-1] if st else - 1)) # 不可以构成括号:栈空 or 当前字符为')' or 栈顶字符为')'else:st.append(i)  # 存入下标return res
  • 动态规划

    •  参考题解

    • class Solution:def longestValidParentheses(self, s: str) -> int:n = len(s)if n <= 1: return 0dp = [0] * n  # dp[i]表示以s[i]结尾的最长有效括号子串res = 0   # 用于更新最大值for i in range(1, n):# (),在dp[i-2]基础上直接延续2个if s[i] == ')' and s[i-1] == '(':           dp[i] = dp[i-2] + 2 if i >= 2 else 2    # 防止越界,dp[0]以前为0# )),先看前一个)匹配多长,再看后一个)能否匹配上(,可以的话就+2elif s[i] == ')' and s[i-1] == ')':         sub_len = dp[i-1]  # 前一个)已经匹配的长度if i-sub_len-1 >= 0 and s[i-sub_len-1] == '(':  # 后一个)要找到(才能匹配上last = dp[i-sub_len-2] if i-sub_len-2 >= 0 else 0  # 找到(之前已经匹配多长,防止越界,dp[0]以前为0dp[i] = dp[i-1] + last + 2  # 前一个)匹配的长度 + 后一个)找到(之前已经匹配的长度 + 2res = max(res, dp[i])  # 更新最大值,没有以上情况dp[i]就是0return res

后言

  • 最后这道困难题真顶啊,要完全搞懂花了不少时间,这两天继续去巩固dp去

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node携手MongoDB探险旅行⛏️

Node携手MongoDB探险旅行⛏️ 本篇文章&#xff0c;学习记录于&#xff1a;尚硅谷&#x1f3a2; 文章简单学习总结&#xff1a;如有错误 大佬 &#x1f449;点. 本篇不适合纯新手&#xff0c;因为本人已经使用很多数据库&#xff0c;很多数据库概念…就不会进行解释&#xff…

presto / trino plugin(自定义UDF函数)开发指南

方案1:自定义udf插件开发 1. Presto插件机制 presto不能像hive那样配置自定义的udf,而是采用插件机制实现。Presto 的插件(Plugin)机制,是 Presto 能够整合多种数据源的核心。通过实现不同的 Plugin,Presto 允许用户在不同类型的数据源之间进行 JOIN 等计算。Presto 内部的…

10、设计模式之外观模式(Facade)

一、什么是外观模式 这个大家一定是经常使用的&#xff0c;外观模式&#xff08;门面模式&#xff09;是一种结构型设计模式。它提供一个统一的接口&#xff0c;用于访问子系统中的一组接口&#xff0c;隐藏了系统的复杂性。最简单的应用就是&#xff0c;当controller层的逻辑处…

C#实现二分查找算法

C#实现二分查找算法 以下是一个使用 C# 实现的二分查找算法示例&#xff1a; using System;class Program {static int BinarySearch(int[] arr, int target){int low 0;int high arr.Length - 1;while (low < high){int mid (low high) / 2;// 如果目标值等于中间元素…

doris安装(docker方式)

背景 doris有两个进程 fe,处理用户请求,查询,元数据管理,节点管理be,数据存储,查询计划执行 架构图如下: 参考:https://doris.apache.org/zh-CN/docs/get-starting/what-is-apache-doris 1、定义docker-compose文件 version: 3 services:docker-fe:image: "apac…

MySQL数据库自动备份(Linux操作系统)

方式一 参考&#xff1a;https://blog.csdn.net/qq_48157004/article/details/126683610?spm1001.2014.3001.5506 1.MySQL备份脚本 在/home/backups/下建立.sh文件&#xff0c;文件名称 mysql_backup.sh ,内容如下 #!/bin/bash #备份路径 BACKUP/home/backups/mysqlBackup…

参考线平滑 - FemPosDeviation算法

FemPosDeviation参考线平滑方法是离散点平滑方法 参考文章&#xff1a; &#xff08;1&#xff09;参考线平滑-FemPosDeviation-OSQP &#xff08;2&#xff09;Planning基础库——散点曲线平滑 &#xff08;3&#xff09;参考线平滑-FemPosDeviation-SQP &#xff08;4&#x…

ICCV 2023 | NeRF-Det

NeRF-Det: Learning Geometry-Aware Volumetric Representation for Multi-View 3D Object Detection 介绍 本文介绍了一种新颖的方法&#xff0c;用于仅使用RGB图像作为输入进行室内3D目标检测。作者提出了利用神经辐射场&#xff08;NeRF&#xff09;来显式估计3D几何形状&…

OCP Java17 SE Developers 复习题09

答案 A, E. For the first scenario, the answer needs to implement List because the scenario allows duplicates, narrowing it down to options A and D. Option A is a better answer than option D because LinkedList is both a List and a Queue, and you just nee…

代码随想录 贪心算法-难度题目-其他题目

目录 53.最大子数组和 134.加油站 968.监控二叉树 53.最大子数组和 53. 最大子数组和 中等 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个…

git提交代码描述时如何换行(更新时间24/3/12)

问题复现&#xff08;信心满满使用转义字符换行&#xff09; 解决方法&#xff1a; 写多个-m字符串的结构可以实现自动换行 注意空格 git commit -m"第一行描述" -m"第二行描述" 效果演示&#xff1a;&#xff08;强迫症福利&#xff09;

网络学习:BGP路径属性分类

目录 前言&#xff1a; 路径属性分类 公认必遵 公认任意 可选过渡 可选非过渡 前言&#xff1a; 在默认情况下&#xff0c;到达同一目的地&#xff0c;BGP只走单条路径&#xff0c;并不会在多条路径之间执行负载均衡。对于IGP路由协议&#xff0c;当有多条路径可以到达同…

dangzero环境配置问题

文章目录 安装虚拟机dangzeroCompile the KML kernelObtain Ubuntu 20.04Create VMInstall UbuntuRun UbuntuMove KML kernel to VMInside VM: Install KernelUpdate grub to auto-select KML kernelBoot parametersRun KMLTest KMLObtain glibc-2.31Install gcc-5 for kernel …

KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记10 - STM32的SDIO学习2 - Card Identification

KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记10 - STM32的SDIO学习2 - Card Identification 一、问题回顾二、本次的任务三、 需要注意的问题3.1 Card Identification Mode时的时钟频率3.2 CMD0指令的疑似问题3.3 发送带参数的ACMD41时要注意时间时序和时效3.4 CPSM的指令发送问题…

【Linux】深入探索:Linux网络调试、追踪与优化

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 1. 调试网络问题 a. 使用ping和traceroute b. 使用netstat和ss c. 使用tcpdump和Wireshark 2. 追踪网络问题 a. 使用mtr b.…

北京公司注册地址想要迁到新疆该如何操作

尊敬的客户&#xff0c;您好&#xff01;我是经典世纪胡云帅&#xff08;游览器搜经典世纪胡云帅&#xff09;&#xff0c;您选择了北京经典世纪集团有限公司-资 质代办&#xff0c;我们将竭诚为您服务&#xff01;如果您的公司注册地址想要迁到新疆&#xff0c;这里有一些重要…

一台服务器,最大支持的TCP连接数是多少?

一个服务端进程最大能支持多少条 TCP 连接&#xff1f; 一台服务器最大能支持多少条 TCP 连接&#xff1f; 一、原理 TCP 四元组的信息&#xff1a;源IP、源端口、目标IP、目标端口。 一个服务端进程最大能支持的 TCP 连接个数的计算公式&#xff1a;最大tcp连接数客户端的IP…

基于springboot实现成人教育教务系统项目【项目源码+论文说明】

基于springboot实现成人教育教务系统演示 摘要 随着市场经济的产业化结构升级&#xff0c;人才结构也在不断发生这巨大的变化和变革。而且各大企业都在处于一个高速发展和壮大的阶段&#xff0c;在这个高速发展和结构化升级的时期对于人才的需求也在不断的增多。企业和用工单位…

【Python】新手入门学习:详细介绍组合/聚合复用原则(CARP)及其作用、代码示例

【Python】新手入门学习&#xff1a;详细介绍组合/聚合复用原则&#xff08;CARP&#xff09;及其作用、代码示例 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集…

Nmap最常用命令(非常详细)零基础入门到精通,收藏这一篇就够了

nmap是我们最常用的工具。但是命令太多了&#xff0c;没办法全部记下。我们在实际工作中只需要记住最常用的几条命令就行了。 主机发现 里面nmap&#xff0c;我们可以扫描在同一局域网内有哪些设备在线。常用命令如下&#xff1a; nmap 192.168.50.1/24 -sL 上面命令&#…