怎么做网站解析/百度热词
动态规划解题步骤-5部曲
- 确定dp数组(dp table)以及下标的含义
- 确定递推公式
- dp数组如何初始化
- 确定遍历顺序
- 举例推导dp数组
70. 爬楼梯
题目描述
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶?
解题思路
f(n) = f(n-2) + f(n-1)
Python代码
class Solution:def climbStairs(self, n: int) -> int:n_1 = n_2 = 1if n <=1:return 1for i in range(2, n+1):f_n = n_1 + n_2n_2 = n_1n_1 = f_nreturn f_n
118. 杨辉三角
题目描述
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
解题思路
杨辉三角的每个元素是上一行左右两个元素之和,边界元素为 1。用一个二维列表来存储结果,每行第一个和最后一个元素固定为 1,其他元素是它左上和右上的和。
Python代码
class Solution:def generate(self, numRows: int) -> List[List[int]]:if numRows == 0:return []res = [[1]]if numRows == 1:return resres.append([1, 1])if numRows == 2:return resfor i in range(3, numRows+1):last_nums = res[-1] cur_nums = [1]numRows = len(last_nums)for j in range(numRows-1):cur_nums.append(last_nums[j]+last_nums[j+1])cur_nums.append(1)res.append(cur_nums)return res
198. 打家劫舍
题目描述
你是一个专业的窃贼,计划偷窃沿街的房屋。每间房内都藏有一定的现金,如果相邻的两间房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动报警装置的情况下,今晚能够偷窃到的最高金额。
解题思路
使用动态规划来解决。假设 dp[i]
表示前 i
间房屋所能偷窃的最高金额,则状态转移方程为 dp[i] = max(dp[i-1], dp[i-2] + nums[i])
,初始条件为 dp[0] = nums[0]
和 dp[1] = max(nums[0], nums[1])
。
Python代码
class Solution:def rob(self, nums: List[int]) -> int:n = len(nums)dp = [0]*nif n ==1:return nums[0]dp[0] = nums[0]dp[1] = max(nums[0], nums[1])for i in range(2, n):dp[i] = max(dp[i-1], nums[i]+dp[i-2])return dp[n-1]
279. 完全平方数
题目描述
给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。
解题思路
使用动态规划来解决。假设 dp[i]
表示组成整数 i
所需要的最少的完全平方数的数量,则状态转移方程为 dp[i] = min(dp[i - 1* 1] + 1,dp[i - 2 * 2] + 1,... , dp[i - j * j] + 1)
,其中 j * j
是当前平方数,由此来更新每一个 dp
位置。
求和问题
Python代码
class Solution:def numSquares(self, n: int) -> int:dp = [0] * (n + 1)dp[1] = 1for i in range(2, n + 1):j = 1res = float('inf')while j * j <= i:res = min(res, dp[i - j * j] + 1)j += 1dp[i] = resreturn dp[n]
322. 零钱兑换
题目描述
给定不同面额的硬币和一个总金额。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。
解题思路
完全背包问题:
背包容量:总金额
物品重量:硬币价值
物品价值:数量
假设 dp[i]
表示金额 i
所需的最小硬币数,则状态转移方程为 dp[i] = min(dp[i], dp[i - coin] + 1)
,其中 coin
是可选的硬币面值。
完全背包的物品可以被取无数次,因此完全背包的内循环为正序,当前物品可以被重复取用;
Python代码
class Solution:def coinChange(self, coins: List[int], amount: int) -> int:n = len(coins)dp = [float("inf")] * (amount + 1)dp[0] = 0for i in range(1, amount + 1):if i % coins[0] == 0:dp[i] = i // coins[0]for i in range(1, n):for j in range(coins[i], amount + 1):dp[j] = min(dp[j], dp[j-coins[i]] + 1)return -1 if dp[amount] == float("inf") else dp[amount]
139. 单词拆分
题目描述
给定一个非空字符串 s
和一个包含非空单词列表的字典 wordDict
,判定 s
是否可以被空格拆分为一个或多个在字典中出现的单词。
输入: s = “applepenapple”, wordDict = [“apple”, “pen”]
输出: true
解题思路
可以转化成完全背包问题,而且是排列问题,字符串s是背包,字符串列表里的字符是物品; dp[i]
表示前 i
个字符是否能被拆分; 因为是排列问题,所以外循环遍历背包,内循环遍历物品;
Python代码
class Solution:def wordBreak(self, s: str, wordDict: List[str]) -> bool:n = len(s)word_n = len(wordDict)dp = [False] * (n + 1)dp[0] = Truefor j in range(1, n+1):for i in range(word_n):if j >= len(wordDict[i]):dp[j] = (dp[j] or (s[j - len(wordDict[i]):j] == wordDict[i] and dp[j-len(wordDict[i])]))# print(dp)return dp[n]
300. 最长递增子序列
题目描述
给定一个无序的整数数组,找到其中最长递增子序列的长度。
解题思路
使用动态规划来解决。假设 dp[i]
表示以 nums[i]
结尾的最长递增子序列的长度,则状态转移方程为:dp[i] = max(dp[j] + 1)
,其中 j
从 0
到 i-1
且 nums[j] < nums[i]
。
Python代码
class Solution:def lengthOfLIS(self, nums: List[int]) -> int:n = len(nums)dp = [1] * nres = 1for i in range(1, n):for j in range(i):if nums[j] < nums[i]:dp[i] = max(dp[i], dp[j] + 1)res = max(res, dp[i])return res
152. 乘积最大子数组
题目描述
给你一个整数数组 nums
,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
输入: nums = [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
解题思路
使用动态规划来解决。维护两个变量 max_val
和 min_val
,表示以当前元素为结尾的子数组的最大乘积和最小乘积,然后遍历数组更新这两个值。
Python代码
class Solution:def maxProduct(self, nums: List[int]) -> int:if not nums:return 0max_val = min_val = res = nums[0]for i in range(1, len(nums)):if nums[i] < 0:max_val, min_val = min_val, max_valmax_val = max(nums[i], max_val * nums[i])min_val = min(nums[i], min_val * nums[i])res = max(res, max_val)return res
416. 分割等和子集
题目描述
给定一个只包含正整数的非空数组,判断是否可以将这些数字分成两个子集,使得两个子集的元素和相等。
解题思路
转换0,1背包问题,判断是否能找到一个子集,其和等于总和的一半。01背包问题,内循环反向遍历
Python代码
class Solution:def canPartition(self, nums: List[int]) -> bool:n = len(nums)s = sum(nums)if s % 2 != 0:return Falsetarget = s // 2dp = [False] * (target + 1)dp[0] = Truefor i in range(1, target + 1):if nums[0] == i:dp[i] = Truefor i in range(1, n):# 0,1背包,反向遍历for j in range(target, nums[i] - 1, -1):dp[j] = dp[j] or dp[j - nums[i]]return dp[target]
32. 最长有效括号
题目描述
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
解题思路
使用动态规划来解决。假设 dp[i]
表示以 i
结尾的最长有效括号的长度。状态转移方程根据当前字符和前一个字符的情况来判断。如果s[i]=‘(’,那么dp[i]一定是0, s[i] ='('的情况见代码中的注释。
Python代码
class Solution:# ((()))# 012345def longestValidParentheses(self, s: str) -> int:n =len(s)dp = [0] * nres = 0for i in range(1, n):if s[i] == '(':continue# 当前是')', 前一个字符是'('if s[i - 1] == '(':if i == 1:dp[i] = 2else:dp[i] = dp[i-2] + 2# 当前是')', 前一个也是')',那就需要判断s[i - 1 - dp[i-1]]是不是'(',是的话就能和当前的')'匹配上elif i - 1 - dp[i-1] >= 0 and s[i - 1 - dp[i-1]] == '(':dp[i] = dp[i-1] + 2if i - 2 - dp[i-1] >= 0:dp[i] += dp[i - 2 - dp[i-1]]res = max(res, dp[i])return res
相关文章:

Python题解Leetcode Hot100之动态规划
动态规划解题步骤-5部曲 确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 70. 爬楼梯 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到…...

你了解GD32 MCU上下电要求吗
你了解GD32 MCU的上下电要求吗?MCU的上下电对于系统的稳定运行非常重要。 以GD32F30X为例,上电/掉电复位波形如如下图所示。 上电过程中,VDD/VDDA电压上电爬坡,当电压高于VPOR(上电复位电压)MCU开始启动&a…...

二、【Python】入门 - 【PyCharm】安装教程
往期博主文章分享文章: 【机器学习】专栏http://t.csdnimg.cn/sQBvw 目录 第一步:PyCharm下载 第二步:安装(点击安装包打开下图页面) 第三步:科学使用,请前往下载最新工具及教程:…...

2、程序设计语言基础知识
这一章节的内容在我们的软件设计师考试当中,考的题型比较固定,基本都是选择题,分值大概在2~4分左右。 而且考的还多是程序设计语言的一些基本语法,特别是这两年比较火的Python。 所以对于有一定要编程基础的即使本章的内容不学习&…...

ARM/Linux嵌入式面经(十八):TP-Link联洲
文章目录 虚拟内存,页表,copy on write面试题1:面试题2:面试题3:进程和线程的区别红黑树和b+树的应用红黑树的应用B+树的应用视频会议用了哪些协议1. H.323协议2. SIP协议(会话发起协议)3. WebRTC(网页实时通信)4. 其他协议io多路复用(select,poll,epoll)面试题li…...

解读vue3源码-响应式篇2
提示:看到我 请让我滚去学习 文章目录 vue3源码剖析reactivereactive使用proxy代理一个对象1.首先我们会走isObject(target)判断,我们reactive全家桶仅对对象类型有效(对象、数组和 Map、Set 这样的集合类型),而对 str…...

【测开能力提升-fastapi框架】fastapi能力提升 - 中间件与CORS
1. 中间件 1.1 介绍(ChatGPT抄的,大致可以理解) 一种机制,用于在处理请求和响应之前对其进行拦截、处理或修改。中间件可以在应用程序的请求处理管道中插入自定义逻辑,以实现一些通用的功能,如身份验证、…...

centos7安装es及简单使用
为了方便日后查看,简单记录下! 【启动es前,需要调整这个配置文件(/opt/elasticsearch-6.3.0/config/elasticsearch.yml)的两处ip地址,同时访问页面地址的ip:9200时,ip地址也对应修改】 【启动kibana前,需要调整这个配置文件(/opt/kibana-6.3.0/config/k…...

2024年自动驾驶SLAM面试题及答案(更新中)
自动驾驶中的SLAM(Simultaneous Localization and Mapping,即同步定位与地图构建)是关键技术,它能够让车辆在未知环境中进行自主定位和地图建构。秋招来临之际,相信大家都已经在忙碌的准备当中了,尤其是应届…...

HTML零基础自学笔记(上)-7.18
HTML零基础自学笔记(上) 参考:pink老师一、HTML, Javascript, CSS的关系是什么?二、什么是HTML?1、网页,网站的概念2、THML的基本概念3、THML的骨架标签/基本结构标签 三、HTML标签1、THML标签介绍2、常用标签图像标签ÿ…...

数学建模--图论与最短路径
目录 图论与最短路径问题 最短路径问题定义 常用的最短路径算法 Dijkstra算法 Floyd算法 Bellman-Ford算法 SPFA算法 应用实例 结论 延伸 如何在实际应用中优化Dijkstra算法以提高效率? 数据结构优化: 边的优化: 并行计算&…...

FLINK-checkpoint失败原因及处理方式
在 Flink 或其他分布式数据处理系统中,Checkpoint 失败可能由多种原因引起。以下是一些常见的原因: 资源不足: 如果 TaskManager 的内存或磁盘空间不足,可能无法完成状态的快照,导致 Checkpoint 失败。 网络问题&am…...

Hbase映射为Hive外表
作者:振鹭 Hbase对应Hive外表 (背景:在做数据ETL中,可能原始数据在列式存储Hbase中,这个时候,如果我们想清洗数据,可以考虑把Hbase表映射为Hive的外表,然后使用Hive的HQL来清除处理数据) 1. …...

洛谷P1002(过河卒)题解
题目传送门 思路 直接爆搜会TLE,所以考虑进行DP。 由于卒只可以从左边和上面走,所以走到(i,j)的路程总数为从上面走的路程总数加上从左边走的路程总数。我们用dp[i][j]表示从起点走到(i,j)的路程总数,那么状态转移方程为: dp[…...

微信小程序 async-validator 表单验证 第三方包
async-validator 是一个基于 JavaScript 的表单验证库,支持异步验证规则和自定义验证规则 主流的 UI 组件库 Ant-design 和 Element 中的表单验证都是基于 async-validator 使用 async-validator 可以方便地 构建表单中逻辑,使得错误提示信息更加友好和灵…...

马克·扎克伯格解释为何开源AI对开发者有利
Meta 今天发布了 Llama 3.1 系列人工智能模型,在人工智能领域取得了重大进展,其性能可与领先的闭源模型相媲美。值得一提的是,在多项人工智能基准测试中,Llama 3.1 405B 模型的性能超过了 OpenAI 的 GPT-4o 和 Claude 3.5 Sonnet。…...

游戏外挂的技术实现与五年脚本开发经验分享
引言: 在数字娱乐的浪潮中,电子游戏成为许多人生活中不可或缺的一部分。然而,随着游戏的普及,一些玩家为了追求更高效的游戏体验或不正当竞争优势,开始使用游戏外挂程序。这些外挂往往通过修改游戏正常运行机制来提供非…...

认识神经网络【多层感知器数学原理】
文章目录 1、什么是神经网络2、人工神经网络3、多层感知器3.1、输入层3.2、隐藏层3.2.1、隐藏层 13.2.2、隐藏层 2 3.3、输出层3.4、前向传播3.4.1、加权和⭐3.4.2、激活函数 3.5、反向传播3.5.1、计算梯度3.5.2、更新权重和偏置 4、小结 🍃作者介绍:双非…...

MySQL入门学习-SQL高级技巧.CTE和递归查询
在 MySQL 中,SQL 高级技巧包括了 Common Table Expressions(CTE)和递归查询等。 一、CTE(Common Table Expressions,公共表表达式)的概念: CTE 是一个临时的结果集,它可以在一个查询…...

键盘是如何使用中断机制的?当打印一串字符到显示屏上时发生了什么???
当在键盘上按下一个键时会进行一下操作: 1.当按下任意一个键时,键盘编码器监控会来判断按下的键是哪个 2.键盘控制器用将解码,将键盘的数据保存到键盘控制器里数据寄存器里面 3.此时发送一个中断请求给中断控制器,中断控制器获取到中断号发送…...

Spring Boot 接口访问频率限制的实现详解
目录 概述为什么需要接口访问频率限制常见的实现方式 基于过滤器的实现基于拦截器的实现基于第三方库Bucket4j的实现 实际代码示例 基于过滤器实现Rate Limiting基于拦截器实现Rate Limiting使用Bucket4j实现Rate Limiting 最佳实践 选择合适的限流算法优化性能记录日志和监控…...

前端页面:用户交互持续时间跟踪(duration)user-interaction-tracker
引言 在用户至上的时代,精准把握用户行为已成为产品优化的关键。本文将详细介绍 user-interaction-tracker 库,它提供了一种高效的解决方案,用于跟踪用户交互的持续时间,并提升项目埋点的效率。通过本文,你将了解到如…...

中文分词库 jieba 详细使用方法与案例演示
1 前言 jieba 是一个非常流行的中文分词库,具有高效、准确分词的效果。 它支持3种分词模式: 精确模式全模式搜索引擎模式 jieba0.42.1测试环境:python3.10.9 2 三种模式 2.1 精确模式 适应场景:文本分析。 功能࿱…...

EXO-helper解释
目录 helper解释 helper解释 在Python中,字符串 "\033[93m" 是一个ANSI转义序列,用于在支持ANSI转义码的终端或控制台中改变文本的颜色。具体来说,\033[93m 用于将文本颜色设置为亮黄色(或浅黄色,具体取决于终端的显示设置)。 这里的 \033 实际上是八进制的 …...

Qt开发网络嗅探器01
引言 随着互联网的快速发展和普及,人们对网络性能、安全和管理的需求日益增长。在复杂的网络环境中,了解和监控网络中的数据流量、安全事件和性能问题变得至关重要。为了满足这些需求,网络嗅探器作为一种重要的工具被 广泛应用。网络嗅探器是…...

mysql面试(三)
MVCC机制 MVCC(Multi-Version Concurrency Control) 即多版本并发控制,了解mvcc机制,需要了解如下这些概念 事务id 事务每次开启时,都会从数据库获得一个自增长的事务ID,可以从事务ID判断事务的执行先后…...

阿里云公共DNS免费版自9月30日开始限速 企业或商业场景需使用付费版
本周阿里云发布公告对公共 DNS 免费版使用政策进行调整,免费版将从 2024 年 9 月 30 日开始按照请求源 IP 进行并发数限制,单个 IP 的请求数超过 20QPS、UDP/TCP 流量超过 2000bps 将触发限速策略。 阿里云称免费版的并发数限制并非采用固定的阈值&…...

捷配生产笔记-一文搞懂阻焊层基本知识
什么是阻焊层? 阻焊层(也称为阻焊剂)是应用于PCB表面的一层薄薄的聚合物材料。其目的是保护铜电路,防止焊料在焊接过程中流入不需要焊接的区域。除焊盘外,整个电路板都涂有阻焊层。 阻焊层应用于 PCB 的顶部和底部。树…...

html 常用css样式及排布问题
1.常用样式 <style>.cy{width: 20%;height: 50px;font-size: 30px;border: #20c997 solid 3px;float: left;color: #00cc00;font-family: 黑体;font-weight: bold;padding: 10px;margin: 10px;}</style> ①宽度(长) ②高度(宽&a…...

【SpingCloud】客户端与服务端负载均衡机制,微服务负载均衡NacosLoadBalancer, 拓展:OSI七层网络模型
客户端与服务端负载均衡机制 可能有第一次听说集群和负载均衡,所以呢,我们先来做一个介绍,然后再聊服务端与客户端的负载均衡区别。 集群与负载均衡 负载均衡是基于集群的,如果没有集群,则没有负载均衡这一个说法。 …...