力扣刷题Day5——内涵动态规划讲解

题目1:

先来一道很简单的题目:

2697. 字典序最小回文串 - 力扣(LeetCode)

思路:

为了得到字典序最小的回文字符串,对于回文串,就是需要左右的字符相等,而要最小的回文串,就需要判断,在对称位置下,哪一个字母是字典序最小的,就把另一个赋值和它一样的字母,这样就可以实现这道题目了。

代码:

char * makeSmallestPalindrome(char * s){int l=strlen(s);int a=0;int b=l-1;while(a<b){if(s[a]<s[b]){s[b--]=s[a++];}else{s[a++]=s[b--];}}return s;
}

题目2:

746. 使用最小花费爬楼梯 - 力扣(LeetCode)

这道题比上面的要难一点,主要涉及的知识点就是——动态规划

那首先这里就来介绍一下什么是动态规划,这样的题目该怎么做?

动态规划讲解:

1.什么是动态规划?

动态规划是解决计算机中最优化问题的方法——通过避免重复计算来实现优化,利用哈希表等来保存中间的计算结果——所以也称为记忆化搜索——所以动态规划其实是空间换取时间

2.怎么实现动态规划?

1)首先把所有可能暴力的列举出来,并画出递归树

2)尝试写一个递归函数求解

3)  如果发现有大量的重复计算,可以用字典、哈希表来存储

4)改写成迭代的形式

概括一下就是——

1.穷举法/暴力搜索列举

2.记忆化搜索

3.改写成迭代的形式

这样看其实还是不好理解,那下面来利用今天这道题来分析一下——

思路: 

首先对于这道上楼梯的题目,设cost数组长度为n,则一共有n+1个台阶

假设数组大小为9,则数组是0到8,但是顶层是9

1. 一般先要分析成递归的形式——从开头看,或者是从结尾看比较容易

这里从最后一个元素看吧——

        1)如果最后一个元素到顶需要2步,则在7上顶层

        2)如果最后一个到顶需要1步,则在8上顶层

这时候发现,这个从最后一个台阶到顶部的问题其实和这个本来的题目的问题很像,不过是变小了,那么这时候就可以进行第二步了

(⭐注:动态规划有「选或不选」「枚举选哪个」这两种基本思考方式。本题目用到的是「枚举选哪个」的方式思考)

2. 定义数组元素的含义

既然动态规划是为了减少重复计算的,那么需要一个空间来存储其计算过的元素,所以这里要定义一下这个记忆数组到底要存储什么?

——怎么分析呢?

这个就是和题目结合起来就OK——题目是什么?使用最小花费来上顶层,

因为要解决的问题都是「从 0 或 1 爬到 i」,所以定义 a(i) 表示从 0 或 1 爬到 i 的最小花费。

3. 步骤1和2结合起来,来分析清楚如何实现递归,明白数组元素之间的联系,缩小问题

还是按照步骤1分析的情况来分析——上最后一个台阶,要么上1个要么上2个到顶层

那么如果上1层到顶层,那就是要知道0或者1到n-1层的最小花费a[n-1],再加上从n-1到n的花费

a[n]=a[n-1]+cost[n-1]

那么如果上2层到顶层,那就是要知道0或者1到n-2层的最小花费a[n-2],再加上从n-2到n的花费

a[n]=a[n-2]+cost[n-2]

两种情况取最小值就可以算出到顶层的最小花费了,这里推广到普通的楼层——上到第i层求最小花费也是一样的方法。

a[i]=min(a[i-1]+cost[i-1],a[i-2]+cost[i-2])

4.定义递归边界和入口

递归边界:a(0)=0, a(1)=0;

爬到 0 或 1 不需要花费,因为我们一开始在 0 或 1。

递归入口:dfs(n),也就是答案

5.确定递归顺序

因为是模拟台阶,而且a[i]又a[i-1]和a[i-2]中推出,所以是从前到后遍历cost数组就🆗

代码:

使用c++和c来编写程序:

代码1.

int min(a,b)
{if(a>b){return b;}else{return a;}
}
int minCostClimbingStairs(int* cost, int costSize) {int a[costSize+1];a[0]=a[1]=0;int i;for(i=2;i<=costSize;i++){a[i]=min(a[i-1]+cost[i-1],a[i-2]+cost[i-2]);}return a[costSize];
} 

代码2.

class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {int n=cost.size();vector<int> a(n+1);a[0]=a[1]=0;int i=2;for(;i<=n;i++){a[i]=min(a[i-1]+cost[i-1],a[i-2]+cost[i-2]);}return a[n];}
};

总结:

这里的动态规划其实还是要多加练习,自己分析分析,再结合案例多看看别人怎么做的,再自己独立完成,下面可以在力扣里搜索动态规划的题自行练习。

搜索 - 力扣(LeetCode)

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

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

相关文章

从开发角度理解漏洞成因(03)

文章目录 JS前端验证 - 文件上传设计浏览器禁用JS&#xff0c;前端绕过文件上传漏洞验证漏洞 Ajax 登录验证&#xff0c;状态回显&#xff0c;状态码设计修改返回包绕过登录验证 通过Ajax 传递数据进行购物验证设计1此漏洞也可以修改状态码绕过 持续更新中… 文章中代码资源已上…

Codeforces Round 943 (Div. 3) A~G1

A.Maximize?&#xff08;枚举&#xff09; 题意&#xff1a; 给你一个整数 x x x。你的任务是找出任意一个整数 y y y ( 1 ≤ y < x ) (1\le y\lt x) (1≤y<x)&#xff0c;使得 gcd ⁡ ( x , y ) y \gcd(x,y)y gcd(x,y)y为最大可能数。 ( 1 ≤ y < x ) (1\le y\lt…

深入解析Python中的`add_argument`用法

深入解析Python中的add_argument用法 在Python编程中&#xff0c;add_argument通常与命令行参数解析库argparse有关。这个库主要用于编写用户友好的命令行接口&#xff0c;其核心功能之一就是通过add_argument方法来指定程序可以接受哪些命令行参数。本篇博客将详细介绍argpar…

【算法练级js+java】重复给定字符n次

题目 Repeats the given string n times.&#xff08;复制指定的字符串n次&#xff09; 期望结果 /** * Repeats the given string n times. * * repeat(‘, 3) * // > **’ * * repeat(‘abc’, 2) * // > ‘abcabc’ * * repeat(‘abc’, 0) * // > “” **/ 代码…

【自动驾驶|毫米波雷达】逻辑化讲清快时间与慢时间傅里叶变换

碎碎念&#xff1a;实习过程中发现在进行雷达知识交流时&#xff0c;大部分同事都会用英文简称代替中文的一些称呼&#xff0c;比如Chirp、FFT等等。起初我觉得是因为很多英伟达、TI芯片的开发教程都是英文的&#xff0c;所以看得多了大家都习惯这样称呼&#xff0c;后来在和指…

python爬虫学习------scrapy第三部分(第三十一天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

Sarcasm detection论文解析 |使用 BERT 进行中间任务迁移学习的刺检测

论文地址 论文地址&#xff1a;https://www.mdpi.com/2227-7390/10/5/844#/ github&#xff1a;edosavini/TransferBertSarcasm (github.com) 论文首页 笔记框架 使用 BERT 进行中间任务迁移学习的讽刺检测 &#x1f4c5;出版年份:2022 &#x1f4d6;出版期刊:Mathematics &…

如何利用AI提高内容生产效率

目录 一、自动化内容生成 二、内容分发与推广 三、内容分析与优化 图片来源网络&#xff0c;侵权联系可删 一、自动化内容生成 随着AI技术的飞速发展&#xff0c;自动化内容生成已经成为提高内容生产效率的重要手段。AI可以通过自然语言处理&#xff08;NLP&#xff09;、机…

参数服务器

参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器&#xff0c;可以将数据存储在该容器中&#xff0c;被不同的节点调用&#xff0c;当然不同的节点也可以往其中存储数据。 参数服务器&#xff0c;一般适用于存在数据共享…

鸿蒙内核源码分析(特殊进程篇)

三个进程 鸿蒙有三个特殊的进程&#xff0c;创建顺序如下: 2号进程&#xff0c;KProcess&#xff0c;为内核态根进程.启动过程中创建.0号进程&#xff0c;KIdle为内核态第二个进程&#xff0c;它是通过KProcess fork 而来的.这有点难理解.1号进程&#xff0c;init&#xff0c…

【2024最新华为OD-C卷试题汇总】游戏表演赛分队(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; 文章目录 前…

VS编辑器下使用MFC完成数据相册系统

背景&#xff1a; 实验项目8:数字相册系统 (2周) (一)实验目的 通过该实验&#xff0c;使学生掌握windows程序设计的基本方法。了解相册的基本功能&#xff0c;在传统相册的基础上&#xff0c; 通过应用时钟、图形绘制功能、图形文件的读写功能以及数据库技术&#xff0c;实现对…

AI模型:windows本地运行下载安装ollama运行Google CodeGemma可离线运行数据模型【自留记录】

AI模型&#xff1a;windows本地运行下载安装ollama运行Google CodeGemma可离线运行数据模型【自留记录】 CodeGemma 没法直接运行&#xff0c;需要中间软件。下载安装ollama后&#xff0c;使用ollama运行CodeGemma。 类似 前端本地需要安装 node.js 才可能跑vue、react项目 1…

人大金仓数据库报com.kingbase8.util.KSQLException: 致命错误: 用户 “SYSTEM“ Password 认证失败

com.kingbase8.util.KSQLException: 致命错误: 用户 “SYSTEM” Password 认证失败 解决办法&#xff1a; 问题在于用户权限只不足&#xff0c;相关配置文件在一般在 /data/sys hba.conf,修改IPV4 local connections选项中的改为trust。

网络机顶盒哪个牌子好?经销商整理热门网络机顶盒排名

做实体数码店多年来&#xff0c;网络机顶盒这行我非常了解&#xff0c;各种品牌的网络机顶盒我们全销售过。近来很多朋友咨询我网络机顶盒哪个牌子好&#xff0c;我按照店内近一个季度的销量情况整理了是实体店最畅销的网络机顶盒排名&#xff0c;最受欢迎的品牌是以下这些&…

时钟模块RX8025SA 内置32.768 kHz石英晶体振荡器

实时时钟模块RX8025SA&#xff0c;料号Q41802552000100&#xff0c;是一款低功耗&#xff0c;高精度时钟芯片。时钟芯片RX8025SA选型过程中应该注意哪些&#xff1f;RX8025SA又应用在哪些领域呢&#xff1f;爱普生RTC实时时钟RX8025SA&#xff0c;内置32.768 kHz石英晶体振荡器…

泰山众筹:创新电商模式引领共赢新时代

一、泰山众筹模式概述 泰山众筹模式&#xff0c;作为一种创新型的电商策略&#xff0c;巧妙地将产品销售与积分众筹相结合&#xff0c;为用户和平台双方创造了互利共赢的机会。在此模式下&#xff0c;用户购买指定产品即可获得相应积分&#xff0c;进而可将这些积分投入到众筹…

AI换脸原理(2)——人脸检测参考文献S3FD:源码解析

1 介绍 S3FD是一个实时人脸检测器,这篇论文的主要思想是试图解决一个常见的问题,即基于anchor(锚点)的检测器随着人脸变小而急剧恶化。 基于锚点的目标检测方法是通过对一系列预设锚点进行分类和回归来检测目标的,这些锚点是通过在图像上有规律地平铺一组不同尺度和宽高比…

怎么快速分享视频文件?用二维码看视频的方法

怎样不通过传输下载分享视频内容呢&#xff1f;以前分享视频内容&#xff0c;大多会通过微信、QQ、邮箱、网盘等形式来传递。但是这种方式需要下载后才可以观看&#xff0c;不仅占用手机内存&#xff0c;而且效率也比较低&#xff0c;所以现在很多人会采用视频生成二维码的方式…

初学C++——C++基础、变量、字面量、常量、数据类型、类型转换、变量命名规则、开发环境配置

文章目录 简介C 语言的特性C 开发环境配置C 变量&#xff0c;字面量和常量C 变量变量命名规则 C 字面量C 常量 C 数据类型C 基本数据类型派生数据类型 C 类型转换隐式类型转换C 显式转换 简介 C 是一种静态类型的&#xff0c;自由形式的&#xff08;通常&#xff09;编译的&…