LeetCode刷题总结(一)

news2024/10/6 1:39:22

文章目录

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

前言

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

题型

排序问题

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

简单的算法比如选择、冒泡、插入排序,他们的时间复杂度都是 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.coloradmin.cn/o/1193516.html

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

相关文章

linux下搭建gperftools工具分析程序瓶颈

1. 先安装 unwind //使用root wget https://github.com/libunwind/libunwind/archive/v0.99.tar.gz tar -xvf v0.99.tar.gz cd libunwind-0.99 autoreconf --force -v --install ./configure make sudo make install2. 安装gperftools wget https://github.com/gp…

Linux下内网穿透实现云原生观测分析工具的远程访问

📑前言 本文主要是Linux下内网穿透实现云原生观测分析工具的远程访问设置的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 &…

Redis为什么要使用SDS作为基本数据结构

Redis为什么要使用SDS作为基本数据结构 Redis SDS与C语言中字符串的对比二进制安全兼容部分C字符串函数 Redis SDS与C语言中字符串的对比 SDS中保存了字符串的长度属性,我们在获取字符串长度是的时间复杂度为O(1),而C中字符串则需要对字符串进行遍历时间…

【Spring之底层核心架构概念解析】

文章目录 一、BeanDefinition二、BeanDefinitionReader2.1、AnnotatedBeanDefinitionReader2.2、XmlBeanDefinitionReader 五、ClassPathBeanDefinitionScanner六、BeanFactory七、ApplicationContext7.1、AnnotationConfigApplicationContext7.2、ClassPathXmlApplicationCont…

LeetCode 26. 删除有序数组中的重复项 简单

题目 - 点击直达 1. 26. 删除有序数组中的重复项 简单1. 题目详情1. 原题链接2. 题目要求3. 基础框架 2. 解题思路1. 思路分析2. 时间复杂度3. 代码实现 1. 26. 删除有序数组中的重复项 简单 1. 题目详情 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复…

黑客技术-小白自学

前言 一、什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防…

PLSQL工具 数据库连接名的设置

在help >>surpost info 能看到 这东西好难用啊。。不直接显示url,非要搞个名称。。

7个学习自动化测试小技巧希望能帮助到你

一、编程语言 当我开始担任手动测试人员时,我不喜欢编码。但是,当我逐渐进入自动化领域时,对我来说很清楚,如果没有对编程语言的一些基本了解,就无法编写逻辑自动化测试脚本。 对编程有一点了解,不仅可以…

8 STM32标准库函数 之 实时时钟(RTC)所有函数的介绍及使用

8 STM32标准库函数 之 实时时钟(RTC)所有函数的介绍及使用 1. 图片有格式2 文字无格式二、RTC库函数固件库函数预览2.1 函数RTC_ITConfig2.2 函数RTC_EnterConfigMode2.3 函数RTC_ExitConfigMode2.4 函数RTC_GetCounter.2.5 函数RTC_SetCounter2.6 函数R…

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

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

清华陆向谦教授提到的纽约时报的一篇文章-探讨学历贬值

文章内容来自: https://www.nytimes.com/2017/11/01/education/edlife/stem-jobs-industry-careers.html By Steve Lohr Nov. 1, 2017 阅读简体中文版閱讀繁體中文版 The national priority in education can be summed up in a four-letter acronym: STEM. And…

数据仓库工具箱-第三章-零售业务

文章目录 一、维度模型设计的4步过程1.1 第一步:选择业务过程1.2 第二步:声明粒度1.3 第三步:确定维度1.4 第四步:确定事实 二、零售业务案例研究2.1 第一步:选择业务过程2.2 第二步:声明粒度2.3 第三步&am…

JS加密/解密之用jsjiami保护您的劳动成果

当保护 JavaScript 代码成为开发者关注的重要问题时,许多人会寻求使用加密工具来确保其代码的安全性。下面是一个关于开发者张三如何使用 AES 加密结合 jsjiami来保护其通用后台管理框架的故事: 张三的故事 张三是一位资深的软件工程师,他花…

IT项目管理必备软件,这10款精心整理的项目管理工具请收好!

在快节奏的办公环境下,拥有一支高效的团队是成功的关键。每个团队成员需要能够迅速地沟通,共享信息,跟踪项目进度,并协调工作流程。而为了达到这样的效率,我们需要用到各种强大而实用的项目协作工具。 团队协作工具有…

无人机航迹规划:五种最新智能优化算法(COA、SWO、KOA、GRO、LO)求解无人机路径规划MATLAB

一、五种算法(LSO、SWO、KOA、GRO、LO)简介 1、小龙虾优化算法COA 小龙虾优化算法(Crayfsh optimization algorithm,COA)由Jia Heming 等人于2023年提出,该算法模拟小龙虾的避暑、竞争和觅食行为&#xf…

基于AI智能分析网关的智慧视频监控系统一站式解决方案

1、功能概述 TSINGEE智能分析网关EasyCVR智慧视频监控系统基于云-边-端一体化协同架构,可兼容多协议、多类型的设备接入,实现视频数据采集、海量视频汇聚与处理、按需调阅、全网分发、 告警消息推送、数据级联共享、AI智能分析接入等视频能力服务&#…

我用Devchat开发了公务员报名确认系统自动登录脚本,再也不用担心挤不进去了

#AI编程助手哪家好?DevChat“真”好用 # 演示效果 我用Devchat开发了公务员报名确认系统自动登录,再也不用担心挤不进去了 目录 演示效果前言粉丝独家专属红包码DevChat是什么?DevChat AI编程助手有哪些优势一、安装Vscode1、下载vscode链接…

字形变换-头歌

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行Z字形排列。之后,你的输出需要从左往右逐行读取,产生出一个新的字符串 示例 : 输入: s "QAZWSXEDCRFVTG",numRows 4 输出:"QETAXDVGZSCFWR&…

直播会议一体机安卓主板_5G智能会议一体机双屏异显设计

5G直播会议一体机主板是专门为支持音视频输入输出而设计的,内置有安卓13系统,可兼容多种直播和会议软件。该产品可广泛应用于智能会议一体机、便携式直播设备、录播导播、无人机直播以及视频传输等多个领域。 这款主板采用了国产6纳米旗舰芯片紫光展锐T8…

试题:最大的矩形(给定直方图里面积最大的矩形)

问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。 请找出能放在给定直方图里面积最大的…