LeetCode刷题总结(一)

文章目录

  • 前言
  • 题型
    • 排序问题
    • 动态规划

前言

本文把刷题过程中的总结记下来,方便未来回顾的时候继续拓展。

题型

排序问题

排序问题的解决方法有很多。对于简单算法来说,最重要的是记住思路;对于高级算法来说,最重要的是记住细节

简单的算法比如选择、冒泡、插入排序,他们的时间复杂度都是 O ( n 2 ) O(n^2) O(n2),所以就算是后面高级的排序算法需要用子排序算法时,我们也不会使用这种高时间复杂度的排序算法。对于这种算法最重要的是记住思路,因为编程难度不会很大。
选择排序也就是冒泡排序,他的思路是从第一个元素开始,跟他的后一个元素比较,如果比他小,他们就交换。如果比他大,就不用交换。然后选择数组中的第二个元素,同样的与后一个进行比较,然后以此类推,这样子当我们进行一轮一后,最后一个元素是所有元素中最大的,当我们进行n-1轮以后,数组就排好了。这就是选择排序,也叫冒泡排序。实现起来难度不大,两层循环就够了。
插入排序就是将无序数组中的元素逐个插入到有序数组中。首先选择无序数组中的第一个元素,然后在有序数组中从第一个位置开始找,如果比他大(假设顺序是从小到大的),那么这个有序数组中的索引位置就是这个元素的插入位置。然后再选择无序数组中第二个元素,以此类推。由于他每次插入一个元素,所以叫插入排序。

由于高级算法大多是将一个数组分为两个进行处理的,然后再将两个分数组合并,所以一个特殊的排序方法:两个有序数组的合并排序。也是一个特殊的排序算法。他也很简单,所以只用记住思路就行,设置一个空数组作为排序后的数字的存放数组,然后从两个数组的第一个数字开始。如果第一个数组的值大,就把第二个数组的数字存入存放数组中,然后第二个数组的索引增加,即选择第二个数组的第二个元素;如果第二个数组的值比较大,那么就把第一个数组的值插入到存放数组中,然后第一个数组的索引增加,也就是选择第一个数组的第二个元素。以此类推,直到一方完结以后拼起来。

有了特殊的合并排序算法后,我们就可以讨论高级算法了。首先是归并排序,归并排序的思路是把一个无序数组分成两部分,分别进行排序,排完以后对返回的列表进行合并排序。上面的思路好理解,主要是一些细节需要注意。对于一个数组分成的两个子数组,也是不断采用这种方法,将子数组也划分为两个数组,分别排序,排序好以后再合并。这样无止境的分下去肯定是不行的,一定要设计调整顺序的动作,才能让数组有序,分割数组并不能让数组有序,只是让问题规模变小了。数组划分到只有两个或者一个的情况就可以进行排序了,如果想极端一点就是设置为数组长度为1时,直接返回数组,然后靠合并排序不断合并即可。这样比较省事,不然又要分长度为1,又要分长度为2,稍微麻烦。

接下来是快速排序快速排序的思路也是把一个数组分为两个,不过他不是从位置上分,而是从某个数字开始分,大于他的分为一组,小于他的分为另一组。然后分别排序,排完序后再用简单的合并排序进行合并。说完了思路,再说一下细节,这个数字的选择不是任意的,如果你是按照位置进行选择的,那么恭喜你,很有可能你有数不清的条件语句要写,因为假设说对于某个数组来说,用这个位置的数字作为划分点会导致一个子数组为空。另一个子数组就是它本身。那么当对他的自身子数组进行划分时,又是同样的位置,又是一个空,一个自身,这样就不会停下来。这个不是算法问题,是用位置来选数字所带来的问题。所以最好的方式使用数组里面的特殊值,比如最大值,平均值等。最小值一般也不要用,也会陷入一空一自身的困境。除了这个问题,还有一个更恐怖的问题,如果这个数组里面有很多个一样的数字,或者说这个数组数字都一样,那么你选择的数字仍旧会导致无穷的分组过程中。所以为什么不试试又香又甜的归并排序呢?
来一道leetcode练手。
示例排序算法

更高级的排序算法比如:堆排序、桶排序、基数排序、计数排序等等,之前学过,我给忘记了。

动态规划

动态规划类问题的关键点有很多,包括:
1. 确定问题的边界状态(问题的规模不可能无限缩小,但是缩小到0还是缩小到1这个问题很重要,对于编辑距离问题,缩小到0是递推的基础。如果问题规模缩小到1,就会导致无法解决,哪怕有递推公式也无法解决。)
2. 确定问题规模逐渐扩大时的变化公式(这一步往往是比较困难的,因为很难想到当前状态与之前的哪些状态有关,有的是跟上一步有关,有的是跟之前所有的有关,有的只是跟之前一定范围内的有关。)

以经典的编辑距离问题为例,编辑距离算法被数据科学家广泛应用,是用作机器翻译和语音识别评价标准的基本算法。刚见到这一题,一头雾水,虽然只有三个操作,但是每个操作的具体发生位置和对象都不确定,动作空间很大。给我两个单词,我自己都数不明白要用几步才能把两个字符串变成一样的,更别提操作的流程图了。

示例1
配合着答案,我才明白。首先把动作梳理为三个动作:①A插入一个字符;②B插入一个字符;③A替换一个字符;然后一种状态对应着三种前序动作,也就对应着三种前序状态,如果从某个状态变过来,那操作数肯定是要加1的。只不过又多考虑了一个细节,也就是两个字符串对应的尾字符是不是一致的,如果不一致,自然就不用多操作。

emmm,说这么多,还是有点迷糊,等我再刷一些题,彻底理清楚了,再说吧,目前阶段,先死记硬背吧。动态规划问题与强化学习问题和马尔可夫决策过程的背景很相似。

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

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

相关文章

利用LangChain实现RAG

检索增强生成(Retrieval-Augmented Generation, RAG)结合了搜寻检索生成能力和自然语言处理架构,透过这个架构,模型可以从外部知识库搜寻相关信息,然后使用这些信息来生成response。要完成检索增强生成主要包含四个步骤…

2023亚太杯数学建模A题思路

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料5 最后 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 2023年第十三…

【中间件篇-Redis缓存数据库08】Redis设计、实现、redisobject对象设计、多线程、缓存淘汰算法

Redis的设计、实现 数据结构和内部编码 type命令实际返回的就是当前键的数据结构类型,它们分别是:string(字符串)hash(哈希)、list(列表)、set(集合)、zset (有序集合),但这些只是Redis对外的数据结构。 实际上每种数据结构都有自己底层的…

【DP】背包问题全解

一.简介 DP(动态规划)背包问题是一个经典的组合优化问题,通常用来解决资源分配的问题,如货物装载、投资组合优化等。问题的核心思想是在有限的资源约束下,选择一组物品以最大化某种价值指标,通常是总价值或…

【Java 进阶篇】Java与JQuery选择器:解锁前端开发的魔法大门

在前端开发的世界中,选择器是我们与HTML文档进行互动的钥匙,而Java和JQuery则为我们提供了强大的工具,使得前端开发不再是一个艰深的谜题。本篇博客将围绕Java与JQuery选择器展开,深入解析选择器的奥秘,为你打开前端开…

Qt文档阅读笔记-Fetch More Example解析

Fetch More Example这个例子说明了如何在视图模型上添加记录。 这个例子由一个对话框组成,在Directory的输入框中,可输入路径信息。应用程序会载入路径信息的文件信息等。不需要按回车键就能搜索。 当有大量数据时,需要对视图模型进行批量增…

宝塔开心版hostcli的广告去除

首先感谢hostcli把宝塔7.6剥离了,直接安装我这里是缺少pyenv的包。 直接进入正题吧。 定位到页面左下方的广告位于 /www/server/panel/BTPanel/templates/default/layout.html “退出”按钮下方有条线开始去掉 去掉之前的忘了截图了,就这样吧&#xff…

《QT从基础到进阶·十七》QCursor鼠标的不同位置坐标获取

一些常用鼠标图形: 鼠标光标相对于整个电脑屏幕的位置:QCursor::pos() 当前光标相对于当前窗口的位置:this->mapFromGlobal(QCursor::pos()) void MainWindow::mouseReleaseEvent(QMouseEvent* event) {QPoint pos event->pos(); …

06-解决Spirng中的循环依赖问题

Bean的循环依赖问题 循环依赖: A对象中有B属性 , B对象中有A属性(丈夫类Husband中有Wife的引用, 妻子类Wife中有Husband的引用) toString()方法重写时直接输出wife/husband会出现递归导致的栈内存溢出错误 直接输出wife/husband会调用它们的toString()方法, 在toString()方法…

Spring的Redis客户端

如何在Spring中操作redis 在创建springboot项目的时候引入redis的依赖. 在配置文件里指定redis主机的地址和端口,此处我们配置了ssh隧道,所以连接的就是本机的8888端口. 创建一个controller类,注入操作redis的对象. 前面使用jedis,是通过jedis对象里的各种方法来操作redis的,此…

在任何机器人上实施 ROS 导航堆栈的指南

文章目录 路径规划参考 路径规划 路径规划是导航的最终目标。这允许用户向机器人给出目标姿势,并让它在给定的环境中自主地从当前位置导航到目标位置。这是我们迄今为止所做的一切(地图绘制和本地化)的汇集点。ROS 导航堆栈已经为我们完成了…

通讯协议学习之路(实践部分):SPI开发实践

通讯协议之路主要分为两部分,第一部分从理论上面讲解各类协议的通讯原理以及通讯格式,第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN;视频会发布在bilibili(UID:399951374) 本文…

【PG】PostgreSQL 预写日志(WAL)、checkpoint、LSN

目录 预写式日志(WAL) WAL概念 WAL的作用 WAL日志存放路径 WAL日志文件数量 WAL日志文件存储形式 WAL日志文件命名 WAL内容 检查点(checkpoint) 1 检查点概念 2 检查点作用 触发检查点 触发检查点之后数据库操作 设置合…

四入进博会,优衣库围绕科技可持续演绎“服装进化论”

11月5日,第六届中国国际进口博览会在上海拉开帷幕。这些年来,进博巨大的平台效应,使其成为各个行业头部品牌的秀场,也持续为消费者、产业链带来惊喜。 今年,也是全球服装界科技知名品牌——优衣库的第四次进博之旅。从…

Python爬虫爬取家纺数据并分析

因为时间的原因,没法写一个详细的教程,但是我可以提供一个基本的框架。你需要根据实际情况进行修改和扩展。以下是使用Python的requests库和BeautifulSoup库来爬取网页内容的基本步骤: # 导入所需的库 import requests from bs4 import Beaut…

2023/11/13JAVA学习

字节数组增大的同时,运行速度也会加快,但是大到一定程度就不行了 要想追加数据,要在低级流后面加true,高级流后面加不了 不是乱码,不是让人看的 保持数据一一对应 否则会报错 下载后,拷贝到一个包里,再 comment是你想添加的注释 txt文本也可

[算法训练营] 贪心算法专题(二)

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

Day02_《MySQL索引与性能优化》

文章目录 一、SQL执行顺序二、索引简介1、关于索引2、索引的类型Btree 索引Btree 索引 三、Explain简介四、Explain 详解1、id2、select_type3、table4、type5、possible_keys6、key7、key_len8、ref9、rows10、Extra11、小案例 五、索引优化1、单表索引优化2、两表索引优化3、…

RT-DETR算法优化改进:一种新颖的动态稀疏注意力(BiLevelRoutingAttention) | CVPR2023

💡💡💡本文独家改进: 提出了一种新颖的动态稀疏注意力(BiLevelRoutingAttention),以实现更灵活的计算分配和内容感知,使其具备动态的查询感知稀疏性 1)代替RepC3进行使用; 2)BiLevelRoutingAttention直接作为注意力进行使用; 推荐指数:五星 RT-DETR魔术师专栏介…

leetcode刷题日记:118.Pascal‘s Triangle(杨辉三角)

118.Pascal’s Triangle(杨辉三角) 题目给我们一个整数numRows表示杨辉三角形的行数,返回杨辉三角形的前numRows行,下面给出一个杨辉三角形看看它有哪些规律; 可以看出杨辉三角形的每一行的最左侧和最右侧的值都为1. 其余的第…