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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

asp.net core weapi 结合identity完成登录注册

1.安装所需要的nuget包 <PackageReference Include"Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version"6.0.24" /><PackageReference Include"Microsoft.EntityFrameworkCore" Version"6.0.24" /><PackageR…

工作利器!熟悉这几款数据流图工具,事半功倍!

数据流图工具在现代工作中起到了非常重要的作用。无论是在企业内部的流程优化&#xff0c;还是在软件开发、项目管理、系统设计等领域&#xff0c;数据流图工具都扮演着关键的角色。本文将为大家介绍8款高效的数据流图工具&#xff0c;帮助大家选择适合自己工作需求的工具。 1.…

创建Springboot工程

前期准备 查看是否安装Java;javac命令是否可用; java -version javac 都安装好之后可以进行创建。 步骤 此处我是使用IntelliJ IDEA 进行创建 打开新建项目–选择Spring Initializr 服务器URL&#xff1a;可以使用默认 &#xff0c; 如果感觉太慢可以选择 http://start.a…

原厂监视综合控制继电器 ZZS-7/1 AC220V 凸出端子固定安装

ZZS-7/11分闸、合闸、电源监视综合控制装置&#xff1b; ZZS-7/12分闸、合闸、电源监视综合控制装置&#xff1b; ZZS-7/13分闸、合闸、电源监视综合控制装置&#xff1b; ZZS-7/14分闸、合闸、电源监视综合控制装置&#xff1b; ZZS-7/102分闸、合闸、电源监视综合控制装置…

基于51单片机的万年历-脉搏计仿真及源程序

一、系统方案 1、本设计采用51单片机作为主控器。 2、DS1302采集年月日时分秒送到液晶1602显示。 3、按键年月日时分秒&#xff0c;心率报警上下限。 4、红外对接管传感器采集心率送到液晶1602显示。 5、心率低于下限或高于上限&#xff0c;蜂鸣器报警。 二、硬件设计 原理图如…

vue+nodejs商城实战项目【登录 + 购物车 + 支付】

从零开始一个前端项目并将其完成需要经历一系列步骤。以下是一个常见的开发流程&#xff0c;可以帮助规划和管理项目&#xff1a; 需求分析和规划&#xff1a; 确定项目的目标和范围。定义用户需求和功能要求。制定项目计划和时间表。 技术选型&#xff1a; 选择适当的前端技术…

4面百度软件测试工程师的面试经验总结

没有绝对的天才&#xff0c;只有持续不断的付出。对于我们每一个平凡人来说&#xff0c;改变命运只能依靠努力幸运&#xff0c;但如果你不够幸运&#xff0c;那就只能拉高努力的占比。 2023年7月&#xff0c;我有幸成为了百度的一名测试工程师&#xff0c;从外包辞职了历经100…

Java ClassNotFoundException异常解决指南

Java ClassNotFoundException异常解决指南 《Java ClassNotFoundException异常解决指南》摘要引言了解ClassNotFoundException异常的本质异常的起因表情小贴士 &#x1f61f; 异常的处理常见引发ClassNotFoundException的情况1. **类路径配置错误**2. **依赖关系错误**3. **动态…

评估 RAG 的神器来啦!TruLens + Milvus=?

大型语言模型&#xff08;LLM&#xff09;的日益普及引爆了向量数据库赛道&#xff0c;向量搜索技术也越发受到开发者关注。目前&#xff0c;主流的向量搜索技术提供者包括向量数据库 Milvus 和 Zilliz Cloud&#xff0c;向量搜索库 FAISS&#xff0c;以及与传统数据库集成的向…

IDEA 28 个天花板技巧 + 12 款神级插件,生产力起飞...

IDEA 作为Java开发工具的后起之秀&#xff0c;几乎以碾压之势把其他对手甩在了身后&#xff0c;主要原因还是归功于&#xff1a;好用&#xff1b;虽然有点重&#xff0c;但依旧瑕不掩瑜&#xff0c;内置了非常多的功能&#xff0c;大大提高了日常的开发效率&#xff0c;下面汇总…

pytest + yaml 框架 -58.运行报告总结summary.json

前言 用例运行结束后&#xff0c;在本地生成summary.json 文件&#xff0c;总结运行结果。 v1.5.1版本更新内容&#xff1a; 1.解决参数化&#xff0c;中文在控制台输出问题 2.保存用例结果summary.json 保存用例结果summary.json 命令行执行用例 pytest运行结束&#xff0…

NodeJS 入门笔记

文档地址 课程地址 源码 提取码&#xff1a;963h hello wrold console.log(hello, world);node hello.jsnodejs 中不能使用 DOM(document) 和 BOM(window) 的 API&#xff1a; documentwindowhistorynavigatorlocation 但是下面的 API 是相通的&#xff1a; consoletimer…

振南技术干货集:振南当年入门C语言和单片机的那些事儿(1)

目录 第一章《振南当年入门 C 语言和单片机的那些事儿》 1、注定堕入单片机 1.1 懵懂好奇的我 &#xff08;小时候好奇的性格经常让我屁股开花。初中开始对计算机产生兴趣&#xff0c;并一发不可收拾。&#xff09; 1.2 我的 C 语言学习经历 &#xff08;上大学后自学 C …

制造行业怎么做?看低代码如何引领未来

随着科技的不断发展&#xff0c;制造行业正面临着巨大的变革和挑战。为了提高生产效率、降低成本并更好地适应快速变化的市场需求&#xff0c;越来越多的制造企业将目光投向了低代码开发平台。在众多低代码开发平台中&#xff0c;JNPF低代码快速开发平台凭借其卓越的性能和灵活…

【论文阅读笔记】Detecting AI Trojans Using Meta Neural Analysis

个人阅读笔记&#xff0c;如有错误欢迎指出&#xff01; 会议&#xff1a;2021 S&P Detecting AI Trojans Using Meta Neural Analysis | IEEE Conference Publication | IEEE Xplore 问题&#xff1a; 当前防御方法存在一些难以实现的假设&#xff0c;或者要求直…

【vue 仿百度分页】

vue 仿百度分页 效果图 代码 公用组件 <template><nav class"pagination_nav"><ul class"pagination"><li :class"{ disabled: current 1 }"><a href"javascript:;" click"setCurrent(current - …

JAVA对象大小的获取

1. Java 对象的内存布局 Java的实例对象、数组对象在内存中的组成包括如下三部分&#xff1a;对象头Hearder、实例数据、内存填充。示意图如下所示 对象头 其主要包括两部分数据&#xff1a;Mark Word、Class对象指针。特别地对于数组对象而言&#xff0c;其还包括了数组长度…

2022年09月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 下列不是评判一个算法优劣的标准是?( ) A: 时间复杂度 B: 空间复杂度 C: 难易度 D: 健壮性 答案:C 评价算法的优劣是:时间复杂度,空间复杂度,健壮性,正确性,可读性。因此选…

一周成功拿下4个offer的软件测试面试题,面试必看系列

前言&#xff1a; 压到就是赚到&#xff0c;面试通过的机率就更大&#xff0c;干就完了铁子 【文章末尾给大家留下了大量的福利】 ​编辑 1、什么是兼容性测试&#xff1f;兼容性测试侧重哪些方面&#xff1f; 参考答案&#xff1a; 兼容测试主要是检查软件在不同的硬件平…

el-table 多表格弹窗嵌套数据显示异常错乱问题

1、业务背景 使用vueelement开发报表功能时&#xff0c;需要列表上某列的超链接按钮弹窗展示&#xff0c;在弹窗的el-table列表某列中再次使用超链接按钮点开弹窗&#xff0c;以此类推多表格弹窗嵌套&#xff0c;本文以弹窗两次为例 最终效果如下示例页面 2、具体实现和问题…