当前位置: 首页 > article >正文

leetcode-hot100-15动态规划

4.动态规划文章目录4.动态规划70.爬楼梯方法一:c方法一:js方法一:java118. 杨辉三角方法一:c方法一:js方法一:java198. 打家劫舍方法一:c方法一:js方法一:java279. 完全平方数方法一:c方法一:js方法一:java322. 零钱兑换方法一:c方法一:js方法一:java139. 单词拆分方法一:c方法一:js方法一:java300. 最长递增子序列方法一:c方法一:js方法一:java152. 乘积最大子数组方法一:c方法一:js方法一:java416. 分割等和子集方法一:c方法一:js方法一:java32. 最长有效括号方法一:c方法一:js方法一:java方法二(栈):c方法二:js方法二:java70.爬楼梯假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶方法一:c状态标识:爬到第i层楼梯时,有多少种方法。状态转移方程:dp[i] = dp[i-1] + dp[i-2],表示从走一步和走两步的方式。初始化:dp[1] = 1 , dp[2] = 2。返回值:dp[n],即走到第n层可以有多少种爬法。class Solution{public:intclimbStairs(intn){intdp[50]={0,1,2};// 定义dp数组,dp[0]=0(占位),dp[1]=1(1阶1种),dp[2]=2(2阶2种)for(inti=3;i=n;++i)// 从第3阶开始递推到目标n阶{dp[i]=dp[i-1]+dp[i-2];// 状态转移:到达i阶 = i-1阶走1步 + i-2阶走2步}returndp[n];// 返回爬到n阶的总方法数}};方法一:jsvarclimbStairs=function(n){letdp=newArray(50).fill(0);// 创建长度50的dp数组,初始全部填充0dp[0]=0;// 0阶无意义,占位使用dp[1]=1;// 1阶楼梯:1种爬法dp[2]=2;// 2阶楼梯:2种爬法for(leti=3;i=n;i++){// 从3阶开始遍历到目标n阶dp[i]=dp[i-1]+dp[i-2];// 动态规划核心:当前方法数 = 前一阶 + 前两阶方法数}returndp[n];// 返回n阶楼梯的总攀爬方法数};方法一:javaclassSolution{publicintclimbStairs(intn){int[]dp=newint[50];// 创建长度为50的dp数组,存储每阶楼梯的方法数dp[0]=0;// dp[0]无实际意义,仅作为占位初始化dp[1]=1;// 1阶楼梯只有1种爬法dp[2]=2;// 2阶楼梯有2种爬法for(inti=3;i=n;i++){// 循环从3阶开始递推计算dp[i]=dp[i-1]+dp[i-2];// 递推公式:当前方法数 = 前一阶 + 前两阶方法数之和}returndp[n];// 返回n阶对应的总爬法数量}}118. 杨辉三角给定一个非负整数 *numRows,*生成「杨辉三角」的前numRows行。在**「杨辉三角」**中,每个数是它左上方和右上方的数的和。输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]就是一道找规律的题目,每一列第一个和每一行最后一个初始化为1,其余的为左上方和右上方数之和。状态转移方程:dp[i][j] = dp[i-1][j] + dp[i-1][j-1]。方法一:cclass Solution{public:vectorvectorintgenerate(intnumRows){vectorvectorintdp(numRows);// 定义二维dp数组,行数为numRows,存储杨辉三角for(inti=0;inumRows;++i)// 遍历每一行i,从第0行开始dp[i].resize(i+1),dp[i][i]=1,dp[i][0]=1;// 每行扩容为i+1列,首尾元素赋值为1for(inti=2;inumRows;++i)// 从第2行开始计算中间值(前两行已初始化)for(intj=1;ji;++j)// 遍历每行中间位置j(非首尾)dp[i][j]=dp[i-1][j]+dp[i-1][j-1];// 核心公式:当前值=上一行同列+上一行前一列returndp;// 返回生成好的杨辉三角二维数组}};vector.resize(n):修改容器实际有效元素个数 / 长度,分配空间并初始化;区别:reserve(n)只预存容量、不改元素个数。方法一:jsvargenerate=function(numRows){letdp=newArray(numRows);// 创建二维数组,行数为numRows,对应C++ dp数组for(leti=0;inumRows;i++){// 遍历每一行idp[i]=newArray(i+1).fill(1);// 每行创建i+1长度数组,全部初始化为1(首尾为1)}for(leti=2;inumRows;i++){// 从第2行开始计算中间元素for(letj=1;ji;j++){// 遍历中间列jdp[i][j]=dp[i-1][j]+dp[i-1][j-1];// 杨辉三角核心公式赋值}}returndp;// 返回生成的杨辉三角};方法一:javaclassSolution{publicListListIntegergenerate(intnumRows){ListListIntegerdp=newArrayList();// 创建集合存储杨辉三角,对应C++的vector二维数组for(inti=0;inumRows;i++){// 遍历每一行iListIntegerrow=newArrayList();// 创建当前行的集合for(intj=0;j=i;j++)row.add(1);// 初始化当前行所有元素为1,对应首尾赋值dp.add(row);// 将当前行加入总集合}for(inti=2;inumRows;i++){// 从第2行开始遍历计算中间值for(intj=1;ji;j++){// 遍历每行中间位置jdp.get(i).set(j,dp.get(i-1).get(j)+dp.get(i-1).get(j-1));// 赋值:上一行同列+上一行前一列}}returndp;// 返回最终杨辉三角}}198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下,一夜之内能够偷窃到的最高金额。输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。方法一:c状态表示:dp[i]表示偷窃到第 i 家时,此时偷取到的最大金额。转移方程:dp[i] = max(dp[i-1] , dp[i-2] + num[i-1]) 初始化:dp[0] = nums[1],第一家是可以直接偷取到的。 返回值:返回dp[n],即偷取到最后一家是此时的最大金额。class Solution{public:introb(vectorintnums){intn=nums.size();// 获取房屋数量nvectorintdp(n+1,0);// 创建dp数组,dp[i]表示前i间房能偷的最大金额,初始全0dp[1]=nums[0];// 只有1间房时,最大金额就是第一间房的钱for(inti=2;i=n;++i)// 从第2间房开始遍历dp[i]=max(dp[i-1],dp[i-2]+nums[i-1]);//核心:不偷当前房=dp[i-1],偷当前房=dp[i-2]+当前房钱,取最大值returndp[n];// 返回n间房的最大可偷金额}};1.dp[i] = max(dp[i-1], dp[i-2] + nums[i-1]);选择 A:不偷第 i 间那最大值 =前 i-1 间的最大值对应:dp[i-1]选择 B:偷第 i 间既然偷了第 i 间,就不能偷第 i-1 间最大值 =前 i-2 间最大值 + 第 i 间的钱对应:dp[i-2] + nums[i-1]最终 dp [i] 等于什么?A 和 B 里选更大的那个!方法一:jsvarrob=function(nums){letn=nums.length;// 获取房屋数量nletdp=newArray(n+1).fill(0);// 创建dp数组,长度n+1,全部初始化为0dp[1]=nums[0];// 只有1间房时,最大金额为第一间房的金额for(leti=2;i=n;i++)// 从第2间房开始遍历dp[i]=Math.max(dp[i-1],dp[i-2]+nums[i-1]);// 动态规划核心:不偷/偷当前房取最大值returndp[n];// 返回n间房能偷的最大总金额};方法一:javaclassSolution{publicintrob(int[]nums){intn=nums.length

相关文章:

leetcode-hot100-15动态规划

4.动态规划 文章目录 4.动态规划 70.爬楼梯 方法一:c 方法一:js 方法一:java 118. 杨辉三角 方法一:c 方法一:js 方法一:java 198. 打家劫舍 方法一:c 方法一:js 方法一:java 279. 完全平方数 方法一:c 方法一:js 方法一:java 322. 零钱兑换 方法一:c 方法一:js …...

如何让旧款Mac焕发新生:OpenCore Legacy Patcher终极指南

如何让旧款Mac焕发新生:OpenCore Legacy Patcher终极指南 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否有一台被苹果官方"遗忘"的旧款Mac&a…...

最强AI剪辑工具盘点:免费直接用,小白秒变剪辑大师!

一、AI视频剪辑新时代:为什么选择这些工具? 2025年的AI视频工具已经不再是简单的滤镜和特效叠加,而是真正能够理解内容、自动完成剪辑全流程的智能助手。根据权威评测,真正优秀的AI剪辑工具应该具备以下特点: 真正免费…...

Agisoft Metashape相机标定实战:从原理到精准操作

1. 相机标定为什么重要?从拍照误差说起 每次用手机拍文档时,边缘文字总会出现弯曲变形;航拍测绘时,明明飞行路线笔直,生成的模型却出现波浪形扭曲——这些问题的根源往往在于镜头畸变。就像近视眼看到的世界会有变形&a…...

BGE-Reranker-v2-m3批量处理优化:提升高并发排序效率

BGE-Reranker-v2-m3批量处理优化:提升高并发排序效率 你是不是也遇到过这样的问题?在搭建RAG系统时,向量检索返回了一大堆文档,但真正相关的却没几个。大模型拿着这些“噪音”文档生成答案,结果要么答非所问&#xff…...

如何提升网盘下载效率:直链解析工具使用指南

如何提升网盘下载效率:直链解析工具使用指南 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网盘文件真实下载地址。基于【网盘直链下载助手】修改(改自6.1.4版本) ,自用,去推广,无…...

自指宇宙学:存在如何通过自我描述而实在化(SRC-2024)

自指宇宙学:存在如何通过自我描述而实在化 Self-Referential Cosmology: How Existence Becomes Real Through Self-Description方见华 世毫九实验室 摘要:本文提出“自指宇宙学”(SRC),论证宇宙的实在性源于其自我描述能力。我们发现&#x…...

【开题答辩全过程】以 校园超市购物系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…...

【开题答辩全过程】以 校园创新创业管理系统设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…...

OpenClaw超轻量方案:nanobot镜像对接QQ机器人全流程

OpenClaw超轻量方案:nanobot镜像对接QQ机器人全流程 1. 为什么选择nanobot镜像 去年夏天,我在尝试将OpenClaw接入QQ机器人时遇到了不少麻烦。当时需要分别部署模型服务、配置OpenClaw网关、调试QQ机器人接口,整个过程耗费了整整三天时间。直…...

Keil多工程工作空间创建与管理实践

Keil系列教程14:创建多工程工作空间的技术实践1. 项目概述在嵌入式开发中,当项目复杂度增加时,往往需要管理多个相互关联的工程。Keil MDK-ARM开发环境提供了多工程工作空间(Multi-Project Workspace)功能,…...

驱动中阻塞相关函数的基础

wait_queue_head_t定义等待队列头#include <linux/wait.h> /** lock&#xff1a;自旋锁&#xff0c;用于保护队列操作&#xff08;如添加/删除等待项&#xff09;的并发安全* head&#xff1a;链表头&#xff0c;指向等待队列项的链表*/ typedef struct wait_queue_head …...

RISC-V开发工具链技术解析与选型指南

1. RISC-V开发工具链技术解析1.1 RISC-V生态发展背景随着处理器架构领域对开放性和灵活性的需求增长&#xff0c;RISC-V指令集架构凭借其开源特性获得了广泛关注。与传统架构相比&#xff0c;RISC-V免除了授权费用&#xff0c;降低了开发门槛&#xff0c;这使得芯片厂商和工具链…...

计算机毕业设计springboot鲜花在线商城 基于SpringBoot的园艺花卉网络销售系统 基于Java Web的线上花店订购管理平台

计算机毕业设计springboot鲜花在线商城911yt9 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09;本套源码可以先看具体功能演示视频领取&#xff0c;文末有联xi 可分享近年来&#xff0c;互联网技术的迅猛发展和智能终端设备的全面普及&#xff0c;为传统零售行业带来…...

重构窗口管理逻辑的效率革命:Loop重新定义macOS多任务体验

重构窗口管理逻辑的效率革命&#xff1a;Loop重新定义macOS多任务体验 【免费下载链接】Loop MacOS窗口管理 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 当你在三个浏览器窗口、两个文档和一个设计工具间频繁切换时&#xff0c;当你花费十分钟拖拽调整窗口…...

ExplorerPatcher:Windows资源管理器崩溃修复与体验增强的终极解决方案

ExplorerPatcher&#xff1a;Windows资源管理器崩溃修复与体验增强的终极解决方案 【免费下载链接】ExplorerPatcher 提升Windows操作系统下的工作环境 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher 你是否经历过Windows 11资源管理器频繁崩溃的困…...

三步掌握HiGHS线性优化求解器:从入门到实战

三步掌握HiGHS线性优化求解器&#xff1a;从入门到实战 【免费下载链接】HiGHS Linear optimization software 项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS 在数据分析与决策优化领域&#xff0c;如何高效解决资源分配、生产计划等线性规划问题一直是核心挑…...

BooruDatasetTagManager 2.5.0:重构AI训练数据标注的技术架构与效率范式

BooruDatasetTagManager 2.5.0&#xff1a;重构AI训练数据标注的技术架构与效率范式 【免费下载链接】BooruDatasetTagManager 项目地址: https://gitcode.com/gh_mirrors/bo/BooruDatasetTagManager 在计算机视觉和生成式AI模型训练的工作流中&#xff0c;数据标注的质…...

3分钟快速上手:用BepInEx为Unity游戏添加无限可能的终极插件框架

3分钟快速上手&#xff1a;用BepInEx为Unity游戏添加无限可能的终极插件框架 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 你是否曾想过为心爱的Unity游戏添加新功能&#xff0c…...

OpenClaw怎么做到不串台、能并行、还总回对群 [特殊字符]✅(含源码解析)--OpenClaw系列第1期

你把 OpenClaw 部署进群&#xff0c;大家立刻把它当万能同事用&#xff1a;小王在 dev-team 群&#xff1a;bot 帮我写发布计划小李在同群线程&#xff1a;bot CI 为啥挂了&#xff1f;你在私聊&#xff1a;这个别在群里说…还有人&#xff1a;bot 同时分析文档 A、B&#xff0…...

Attention Unet vs Unet++:在Camvid数据集上的性能对比实验

Attention Unet与Unet在Camvid数据集上的深度性能评测 语义分割作为计算机视觉领域的核心任务之一&#xff0c;其模型架构的创新从未停止。在众多改进方案中&#xff0c;Attention机制与嵌套跳跃连接&#xff08;Nested Skip Connection&#xff09;分别代表了两种不同的优化思…...

Bedook超声波传感器应用测试

⒈实物和型号⑴产品型号&#xff1a;Bedook UM30-T20P-C31S12-X&#xff08;PNP型&#xff09;⑵实物图片&#xff1a;⑶产品规格&#xff1a;一般说明感应距离150…2000mm调节范围200…2000mm盲区0…150mm标准检测物100mm100mm换能器频率112kHz响应延时出厂设定200ms工作方式/…...

海康MVS安装注意事项

⒈目的 掌握海康MVS相机配置软件安装技巧&#xff0c;以便在MvCameraControlNet的演示案例运行时不报错&#xff08;通常为找不到MvCameraControl.dll&#xff09;&#xff0c;问题为MVS安装时无法对安装环境进行配置。 ⒉安装资源 在海康机器人官网上&#xff1a;海康机器人…...

Ai人工智能知识补充

文章目录 1.5 数据与算法基础:智能系统的“燃料”与“引擎” 1.5.1 数据工程:从原始数据到模型“燃料”的全链路 1.5.2 算法模型构建:从问题定义到模型部署的“炼金术” 1.5.3 数据隐私与安全:在价值挖掘与权利保护间走钢丝 1.6 面临的主要挑战:通往真正智能之路的险阻 1.…...

如何快速创建专业图表:Mermaid数据可视化的完整指南

如何快速创建专业图表&#xff1a;Mermaid数据可视化的完整指南 【免费下载链接】mermaid mermaid-js/mermaid: 是一个用于生成图表和流程图的 Markdown 渲染器&#xff0c;支持多种图表类型和丰富的样式。适合对 Markdown、图表和流程图以及想要使用 Markdown 绘制图表和流程图…...

如何使用设计模式-误区

通过学习设计模式&#xff0c;可以使软件开发人员的面向对象分析和设计的能力得到很大的拓展和加强&#xff0c;即使编程人员还没有直接使用设计模式&#xff0c;只要真正用心理解了设计模式&#xff0c;那么软件开发人员的设计水平也将得到很大的提高。当然&#xff0c;学习设…...

嵌入式Linux开发板CH340驱动安装避坑指南(附详细步骤图)

嵌入式Linux开发板CH340驱动安装全流程解析与疑难排错 第一次接触嵌入式Linux开发板时&#xff0c;最让人头疼的往往不是代码编写&#xff0c;而是最基础的开发环境搭建。作为连接电脑与开发板的重要桥梁&#xff0c;CH340串口驱动的安装质量直接决定了后续调试效率。许多初学者…...

OBS Studio架构深度解析:如何构建专业级直播系统的核心技术栈

OBS Studio架构深度解析&#xff1a;如何构建专业级直播系统的核心技术栈 【免费下载链接】obs-studio OBS Studio - 用于直播和屏幕录制的免费开源软件。 项目地址: https://gitcode.com/GitHub_Trending/ob/obs-studio OBS Studio作为开源直播录制软件的标杆&#xff…...

STM32F407定时器TIMER进阶:从PWM生成到输入捕获的实战应用

1. STM32F407定时器基础回顾与进阶方向 在开始深入探讨PWM生成和输入捕获之前&#xff0c;我们先快速回顾一下STM32F407定时器的基本特性。这款芯片内置了多达14个定时器&#xff0c;分为高级控制定时器、通用定时器和基本定时器三大类。其中通用定时器(TIM2-TIM5, TIM9-TIM14)…...

RWKV7-1.5B-g1a作品分享:多轮追问下保持主题聚焦的能力验证

RWKV7-1.5B-g1a作品分享&#xff1a;多轮追问下保持主题聚焦的能力验证 1. 模型简介与测试背景 rwkv7-1.5B-g1a是基于RWKV-7架构的多语言文本生成模型&#xff0c;特别适合基础问答、文案续写、简短总结和轻量中文对话场景。本次测试将重点验证该模型在多轮对话中保持主题聚焦…...