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

news2024/11/25 13:01:27

题目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.coloradmin.cn/o/1652522.html

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

相关文章

【intro】GraphSAGE

论文 https://arxiv.org/pdf/1706.02216 abstract 大图中节点的低维embedding已经被证明在各种预测任务中非常有用&#xff0c;然而&#xff0c;大多数现有的方法要求在embedding训练期间图中的所有节点都存在;这些先前的方法属于直推式&#xff08;transductive&#xff09…

中仕公考:非应届生能考军队文职吗?

军队文职考试的招生对象主要针对普通高等学校的毕业生以及社会人才&#xff0c;报考条件中并没有限制考生必须是应届毕业生。所以&#xff0c;往届毕业生也是具备报考资格的&#xff0c;只需其满足相关的申请条件即可。 报考人员可大致分为三类&#xff1a;普通高校毕业生、社…

LabelImg下载及目标检测数据标注

为什么这一部分内容这么少会单独拎出来呢&#xff0c;因为后期会接着介绍YOLOv8中的其他任务&#xff0c;会使用其他软件进行标注&#xff0c;所以就单独区分开来每一个任务的标注方式了。 这一部分就介绍目标检测任务的标注&#xff0c;数据集是我从COCO2017Val中抽出来两类&a…

Edge的使用心得和深度探索-Sider: ChatGPT 侧边栏

作为一款备受欢迎的网络浏览器&#xff0c;Microsoft Edge在用户体验和功能方面都有着诸多优势。在长期的使用中&#xff0c;我总结出了三条使用心得&#xff0c;同时也发现了三个能够极大提高效率的功能。让我们一起深度探索Edge的潜力吧&#xff01; 使用心得&#xff1a; 界…

如果你已经掌握了C语言和C++,想要学习QT

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Qt的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;我认为这并不是难事。对于我来说&#xff0c;我…

4000定制网站,因为没有案例,客户走了

接到一个要做企业站点的客户&#xff0c;属于定制开发&#xff0c;预算4000看起来是不是还行的一个订单&#xff1f; 接单第一步&#xff1a;筛客户 从客户询盘的那一刻开始就要围绕核心要素&#xff1a;预算和工期&#xff0c;凡是不符合预期的一律放掉就好了&#xff0c;没必…

5月的现货黄金价格还会涨吗

近期美国经济陷入滞胀的预期升温&#xff0c;市场对美联储年内降息的预期有所走低&#xff0c;然而目前美国10年期国债的实际收益率已处于2%左右的历史高位&#xff0c;降息空间最终还是打开&#xff0c;带来实际利率的趋势下行——在去全球化的背景下&#xff0c;美元信用持续…

分布式锁之-mysql

使用mysql实现分布式锁的方式这里演示两种&#xff1a; 1:基于 MySQL 实现的乐观锁 2:基于 MySQL 实现的悲观锁 数据库脚本 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for product_stock -- -----------------------…

Redis如何避免数据丢失?——AOF

目录 AOF日志 1. 持久化——命令写入到AOF文件 写到用户缓冲区 AOF的触发入口函数——propagate 具体的实现逻辑——feedAppendOnlyFile 从用户缓冲区写入到AOF文件(磁盘&#xff09; 函数write、fsync、fdatasync Redis的线程池 AOF文件的同步策略 触发的入口函数——…

懒洋洋作业讲解

懒洋洋作业讲解 环境配置 1.软件下载&#xff1a;DCloud - HBuilder、HBuilderX、uni-app、uniapp、5、5plus、mui、wap2app、流应用、HTML5、小程序开发、跨平台App、多端框架 2.软件介绍 HBuilder是由DCloud&#xff08;数字天堂&#xff09;推出的一款面向HTML5的Web开发…

Apple OpenELM设备端语言模型

Apple 发布的 OpenELM&#xff08;一系列专为高效设备上处理而设计的开源语言模型&#xff09;引发了相当大的争论。一方面&#xff0c;苹果在开源协作和设备端AI处理方面迈出了一步&#xff0c;强调隐私和效率。另一方面&#xff0c;与微软 Phi-3 Mini 等竞争对手相比&#xf…

Leetcode—724. 寻找数组的中心下标【简单】

2024每日刷题&#xff08;129&#xff09; Leetcode—724. 寻找数组的中心下标 实现代码 class Solution { public:int pivotIndex(vector<int>& nums) {int sum accumulate(nums.begin(), nums.end(), 0);int prefix 0;for(int i 0; i < nums.size(); i) {i…

软件开发的 20 条基本原则:LoD、SoC、SOLID 等

Introduction 介绍 Software design principles are the foundation of software development. As a software engineer, you can find them in your work tools, languages, frameworks, paradigms, and patterns. They are the core pillars of “good” and “readable” co…

各行业预约上门服务小程序源码系统 在线提交表单+自主接单 带完整的安装代码包以及搭建教程

在当今数字化快速发展的时代&#xff0c;传统行业纷纷寻求与互联网的结合&#xff0c;以提升服务效率和用户体验。为了满足这一需求&#xff0c;罗峰给大家分享一款针对各行业预约上门服务的小程序源码系统。该系统集在线提交表单、自主接单等功能于一体&#xff0c;并附带完整…

揭秘依赖注入:软件开发人员的基本指南

Dependency injection (DI) is a design pattern and programming technique to manage dependencies between different components. 依赖注入&#xff08;DI&#xff09;是一种用于管理不同组件之间依赖关系的设计模式和编程技术。 In DI, the dependencies of a class or ot…

厚德提问大佬答3:让AI绘画更有效率

遇到难题不要怕&#xff01;厚德提问大佬答&#xff01; 厚德提问大佬答 你是否对AI绘画感兴趣却无从下手&#xff1f;是否有很多疑问却苦于没有大佬解答带你飞&#xff1f;从此刻开始这些问题都将迎刃而解&#xff01;你感兴趣的话题&#xff0c;厚德云替你问&#xff0c;你解…

深入分析网络智能摄像头的RTSP协议安全风险

本文为转载&#xff0c;原作者&#xff1a;山石网科安全技术研究院 网络摄像头作为现代安防体系的关键组成部分&#xff0c;已经广泛应用于各类场所&#xff0c;包括交通枢纽、教育机构、企业办公区、零售商场等公共和私人领域。它们主要负责提供实时视频监控&#xff0c;以加…

责任链模式和观察者模式

1、责任链模式 1.1 概述 在现实生活中&#xff0c;常常会出现这样的事例&#xff1a;一个请求有多个对象可以处理&#xff0c;但每个对象的处理条件或权限不同。例如&#xff0c;公司员工请假&#xff0c;可批假的领导有部门负责人、副总经理、总经理等&#xff0c;但每个领导…

【微积分听课笔记】全微分,二元极值,Double Integral

6.6 二元函数的极值_哔哩哔哩_bilibili 此笔记为听课笔记&#xff0c;宋浩老师微积分~ 最近诸事缠身&#xff0c;会有种会不会只做一件事好些。实际上&#xff0c;关键在于动力&#xff0c;我不可能每次都准备充分。动力&#xff0c;分配&#xff0c;这是目前进入大学我正在学…