自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 leetcode面试经典150题——50 快乐数

同样的,我们出来可以利用哈希表来判断循环,还可以用快慢指针来判断循环,因为在一个循环中,快指针一定会追上慢指针,所以当我们快指针追上了慢指针时,就证明出现了循环,返回false,当没有循环的时候,快指针会比慢指针更加快的达到1,因此我们while循环的结束条件为快指针追上了慢指针或者快指针达到了1.以此类推,我们发现从三位数开始往后,其各位平方相加之和不可能大于这个数,所以我们对于任意一个数字,最后都不会变得无穷大,因此不存在出现第二种情况,所以对于一个不是快乐数的数字,一定会出现循环。

2024-01-11 21:09:51 646

原创 leetcode面试经典150题——49 字母异位词分组

根据题目可知字母异位词 是由重新排列源单词的所有字母得到的一个新单词,即出现字母的数量是相同的,那么我们可以将这一特性作为关键字,将具有同一特性的字符串作为值进行存储,那么我们的定义应该为map<vector,vector>,遍历一遍数组,将具有相同特性的字符串加入到其值当中。输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]空间复杂度:o(n)

2024-01-11 11:13:22 646

原创 Ubuntu20.04下A-LOAM配置安装及测试教程(包含报错问题踩坑)

Ubuntu20.04配置ALOAM

2024-01-11 10:56:46 2702 3

原创 error: call to implicitly-deleted default constructor of ‘unordered_map<vector<int>, vector<std::str

将unordered_map的关键字改为其它基本类型,发现没有报错,由于unordered_map的底层为哈希表(散列表),而我们哈希表是通过关键字来计算其存储地址,而对于vector类型的关键字,c++底层并没有实现这种类型()的关键字的计算方法,因此报错。map的底层为红黑树,查询方法与unordered_map根据关键字直接计算其存储地址不同,因此可以使用vector作为关键字的类型。将unoreder_map改为map,编译通过。

2024-01-04 16:33:45 923

原创 算法题之哈希表系列

我们可以利用额外空间来存储每一个单词的出现次数,用vector和哈希表都可以,这里使用哈希表,先判断两个字符串的长度是否相等,不相等直接返回false,否则不想等我们把s中单词出现的次数存储下来,然后遍历字符串t,对于每一个字符,我们都讲其对应哈希表中出现的次数减1,如果发现不在哈希表中,或者是减1后的次数小于0(长度相等的字符串如果不相等肯定存在出现次数较大的字母),那么返回false。时间复杂度:o(logn) 快速排序的时间复杂度和空间复杂度为o(logn)空间复杂度:o(n)

2024-01-04 15:52:41 932

原创 迁移Ubuntu报错问题

然后再进行迁移工作,发现迁移成功,使用命令查看迁移后的目录,发现Ubuntu20.04被迁移到D盘中。使用LxRunOffline-v3.5.0-mingw迁移Ubuntu至非系统盘时,出现如下报错。

2023-12-29 18:03:57 664

原创 leetcode面试经典150题——38 生命游戏

由题目可知,我们遍历矩阵里面的每一个细胞,然后统计它周围8个细胞活细胞的数量,按照题目所设条件,如果活细胞的数量大于3个或者小于2个,那么该活细胞变死细胞,如果活细胞的数量为3个,那么该死细胞变为活细胞,为了避免我们使用到更新后的细胞状态,我们把更新后的细胞状态存储到我们定义的新的矩阵中。输入:board = [[0,1,0],[0,0,1],[1,1,1],[0,0,0]]输出:[[0,0,0],[1,0,1],[0,1,1],[0,1,0]]4.如果死细胞周围正好有三个活细胞,则该位置死细胞复活;

2023-12-21 11:28:02 515

原创 leetcode面试经典150题——37矩阵置零

在方法一中算法的时间复杂度为o(m+n),而题目说需要原地求解,因此方法一不可行,因此我们考虑不申请额外的数组来存储需要置0的行和列,我们可以考虑用矩阵的第一行和第一列来存储需要置0的行和列,但是这么做会导致矩阵第一行第一列的元素被覆盖掉,因此我们先定义两个bool变量来记录第一行和第一列是否有为0的元素,然后再对其它元素进行遍历,将为0元素的行和列在第一行和第一列中相应的位置标记,遍历结束后,最后对第一行和第一列进行处理。输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]

2023-12-19 15:59:37 639

原创 leetcode面试经典150题——36 旋转图像

由方法一可知:对于matrix[i][j],旋转后的新位置为matrix[j][n-i-1],matrix[j][n-i-1]旋转后的位置为matrix[n-i-1][n-j-1],matrix[n-i-1][n-j-1]旋转后的位置为matrix[n-j-1][i],matrix[n-j-1][i]旋转后的位置为matrix[i][j],此时我们惊讶的发现对于一个元素旋转四次后会恢复到原点,很好理解,一个n阶矩阵每次旋转90度,旋转360度后会回到原位置。时间复杂度:o(n²)时间复杂度:o(n²)

2023-12-14 20:26:42 1068

原创 leetcode面试经典150题——35 螺旋矩阵

我们顺时针螺旋输出矩阵的顺序可以看成为输出一个个子矩阵的边框,即每个矩阵的第一行,最后一列,最后一行,第一列,然后去除掉重复输出的四个对角,再对下一个子矩阵循环此输出,考虑特殊情况当子矩阵为一行或者一列时候,直接输出一行或者一列。给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]时间复杂度:o(mn) 矩阵每个元素遍历一次,一共m*n个元素。输出:[1,2,3,6,9,8,7,4,5]

2023-12-08 09:50:58 652

原创 leetcode面试经典150题——34 有效的数独(矩阵)

90) 行,列,3*3方格都需要定义一个大小为10(数字为1-9与下标对应)的vector来记录数字出现的次数。3方格出现的次数,如果其中任意一个出现次数大于1次,则数独不成立,返回false.。3方格内仅能出现一次,那么我们利用vector记录每个元素在行,列,小3。10的vector lines用来记录每一列每个数字出现的次数,3。3的vector subbox用来记录每个方格每个数字出现的次数。10的vector rows用来记录每一行每个数字出现的次数,9。数字 1-9 在每一行只能出现一次。

2023-11-30 16:31:39 599

原创 leetcode面试经典150题——33 最小覆盖子串(滑动窗口)

该题与32题(详细见上一篇讲解32串联所有单词的子串)很相似,唯一不同的是本题所求子串中不仅包含t中的所有字符,还可以包含其他的字符,因此所求子串和t是一个包含的关系,而32题所求子串和t的字符是一一对应的,没有多余的字符,即子串的长度等于t的长度,而此题子串的长度大于等于t的长度。发现此时窗口不包含t中的所有元素,那么right指针右移,此时窗口包含t中所有的元素,记录此时的子串长度。过程如图所示,阴影部分为当前窗口,其中红色字体的字母为存储在哈希表中的元素,窗口内其它元素不进行存储。

2023-11-28 15:02:25 1269

原创 leetcode面试经典150题——32 串联所有单词的子串(中等+困难)

我们定义一个长度为p.size()大小的窗口,在s中不断移动此大小固定的窗口,并且比较窗口内的元素是否由p中的元素组成,考虑到题目给出的字符串都是由26个小写的字母组成因此,我们比较窗口内的元素,可以统计窗口内每个字母出现的次数,和p中每个字母出现的次数是否相同,如果相同,那么此窗口即为所求子串,因此我们定义两个大小为26的vector1和vector2,分别存储窗口中单词出现的次数和p中单词出现的次数。给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。

2023-11-26 22:17:38 1292

原创 leetcode面试经典150题——31 无重复字符的最长子串(方法二极简代码!!!)

设定两个指针left和right指向最长子串的头部和尾部的下一个元素,left和right初始分别为0和1,对于right指向的每一个元素我们都在前面left和right区间内寻找是否出现过,若未出现过,则把它加入子串中,,right指针右移,若出现过,left指针移动到出现的元素后一个位置,right指针移动到出现的元素后两个位置,最后再更新最长子串的长度。时间复杂度:o(n)left,right指针均只会向右移动,遍历一遍字符串,时间复杂度为o(n)空间复杂度:o(n)哈希表的空间为o(n)

2023-11-23 16:15:48 437

原创 leetcode面试经典150题——30 长度最小的子数组

暴力法中枚举子数组起始元素的时间复杂度为o(n),找到最小子数组的时间复杂度为o(n),此时我们考虑优化寻找最小子数组的时间,注意到我们给定的数组的所有的元素都是大于0的,那么我们每一个元素的前缀和都是递增的,因此我们可以利用二分查找来查找最小子数组,如果我们枚举第i个元素为最小子数组的起始元素,那么我们二分查找的元素可以变为target+i的前缀和,而此时找到的目标元素的前缀和-i的前缀和 = target,因此我们找到的元素即为最短子数组的末尾,然后我们再维护最短的一个长度。时间复杂度:o(n²)

2023-11-21 20:48:59 503

原创 leetcode面试经典150题——29 三数之和

在原数组无序的两数之和中,由于输出的是元素的下标,所以我们不能够用排序+双指针的方法,因为会打破元素本来的位置,而此题只需要输出元素即可,无需输出元素的下标,因此我们可以先进行排序,再利用双指针的方法,但此题为三数之和,我们考虑,我们先确定第一个数,那么找其它两个数就相当于找target和为0-num[i](第一个数)的两个数,这样就转变成了两数之和,对于第一个数,我们枚举出数组前n-2个数作为第一个数的情况,然后在第一个数的后面用双指针的方法找出两数之和为target的其它两个数。

2023-11-19 22:25:25 371 1

原创 leetcode面试经典150题——28 盛最多水的容器

1.我们移动指向数较大的指针,首先不管我们怎么移动我们长方形的长都会变小,而我们移动指向数较大的指针,出现的结果又会有2种,第一种为指向一个更大的数,而我们长方形的高由小的数决定,因此我们长方形的高不变,总面积减小,第二种为指向一个更小的数,此时我们长方形的高变小,总面积变小,综上,我们移动指向数较大的指针,无论怎么样,我们的长方形的面积总会减小,因此我们的容积也会减小,所以移动指向较大的数字的指针不可行。解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。空间复杂度:o(1)

2023-11-18 21:29:04 238

原创 奇异值分解(SVD分解)———超详细讲解

对于一个n阶对称矩阵A,如果我们求出了矩阵A的n个特征值,并且求出了这n个特征值对应的特征向量,如果这n个特征向量线性无关,那么矩阵A可被特征分解为:其中Q为n个特征向量组成的矩阵,Q = (q1,q2,….,qn) 其中qi为特征向量,Σ为n个特征值组成的对角矩阵上式也称为相似对角化。然后我们把Q中的特征向量给它单位化并正交化,即满足||qi|| = 1,qi*qj = 0,此时的Q矩阵为正交矩阵,也叫酉(you)矩阵,即满足,这个时候A又可被特征分解为上式也称为正交对角化。

2023-11-18 16:05:44 7415 4

原创 leetcode面试经典150题——27 两数之和 II - 输入有序数组

考虑o(n²)的时间复杂度通过不了,我们考虑时间复杂度为o(nlog)的算法,那么和logn时间复杂度相关的算法就是二分查找,我们遍历数组,遍历到的当前元素为num1,如果num1<target,那么我们需要找的另外一个数就为target-num1,而我们利用数组有序的这一个性质,我们对第二个数去二分查找,查找的时间复杂度为logn,需要遍历一遍数组,所以总的时间复杂度为o(nlogn).由题目可知空间复杂度必须为常量级,暴力解时间复杂度为o(n²),经过测试时间超限,因此我们优化时间复杂度。

2023-11-14 22:23:02 49

原创 leetcode面试经典150题——26 判断子序列

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。, Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?暴力查找,直接在t中查找s的每一个字符,如果匹配,后移,如果不匹配,t移动,s不移动。给定字符串 s 和 t ,判断 s 是否为 t 的子序列。输入:s = “abc”, t = “ahbgdc”时间复杂度:o(n)空间复杂度:o(1)

2023-11-12 20:20:18 118

原创 leetcode面试经典150题——25 验证回文串

考虑对方法一进行优化,我们不用新的字符串存储改变后的字符串,而是直接在原字符串上进行判断,利用双指针发,定义left和right两个指针分别指向头尾,这两个指针会遇到这样的情况。给你一个字符串 s,如果它是 回文串 ,返回 true;空间复杂度:o(n) n为字符串的长度,我们用到了新的字符串存储修改后的字符串。补充:c++中判断一个字符为字母或者为数字的函数为isalnum()时间复杂度:o(n) 空间复杂度:o(1) 没有申请额外的空间。前者为大写转小写,后者为小写转大写。时间复杂度:o(n)

2023-11-11 14:23:57 74

原创 leetcode面试经典150题——24 文本左右对齐 保姆级别讲解!!!

假设单词数量为numWords,所有单词的长度为length,那么剩余的空格数量为maxWidth-length,那么单词之间的空格数量应该为avgBlanks = (maxWidth-length)/(numWords-1),向下取整,如果有多出来的空格,那么题目说,左边的比右边的空格数量多,多出来的空格数量为etraBlanks = (maxWidth-length)%(numWords-1),应该均匀的放在前etraBlanks个间隔中。文本的最后一行应为左对齐,且单词之间不插入额外的空格。

2023-11-10 19:57:06 63

原创 leetcode面试经典150题——23 找出字符串中第一个匹配项的下标

KMP算法的思路是当我们匹配失败的时候,不会去移动我们的主串指针,而是移动子串指针移动到特定的位置,再去进行比较,而这个特定的位置就保存在next数组中。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。该题为字符串匹配算法,直接暴力匹配,返回匹配成功的首个字母下标。时间复杂度:o(mn) m,n分别为主串字串的长度。第一个匹配项的下标是 0 ,所以返回 0。空间复杂度:o(m) m为子串的长度。

2023-11-09 22:04:58 47

原创 leetcode面试经典150题——22 N 字形变换

N子形存储字母是呈周期性变化的,设有r行,那么经过r+r-2列回到起点,所以一个周期为2r-2,每个周期经过1+r-2列,即为r-1列,假设一共n个字母,那么有n/(2r-2)个周期,所以一共有[n/(2r-2)](r-1)列,最后不满一个周期按一个周期处理,因此向上取整。这样就解决了空间浪费的问题,实际上我们对于需要存储到新的一行的元素,我们直接把它加入到这一行的末尾,而不会改变列数。之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。时间复杂度:o(n)

2023-11-09 19:33:26 42

原创 leetcode面试经典150题——21 反转字符串中的单词

所以问题转化为了单词如何存到数组里面,对于每一个单词我们只需要找到它的开头start和末尾end,那么就可以用substr(start,end-start+1)来截取这个单词。而开头肯定为非空的,如果末尾不是最后一个元素那么它的的下一个元素肯定是空的,而且末尾需要在开头确定之后再确定,因此我们根据这个条件来查找start和end。对于方法一中空间复杂度为o(n),我们考虑优化,我们可以从后往前找每一个单词,然后再把单词进行拼接返回,这个时候先找end,再找start,此时空间复杂度为o(1)。

2023-11-08 19:47:59 36

原创 leetcode面试经典150题——20 最长公共前缀

我们知道公共最长前缀的最大长度为最短单词的长度,所以我们从0到最短单词的长度枚举出每一个公共前缀的长度,期间如果发现不匹配的情况,停止遍历,输出最长公共前缀。输入:strs = [“flower”,“flow”,“flight”]编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。时间复杂度o(n²)

2023-11-08 18:36:50 79

原创 leetcode面试经典150题——19 最后一个单词的长度

描述给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1:输入:s = “Hello World”输出:5解释:最后一个单词是“World”,长度为5。leetcode方法一:最后一个单词的长度 = 末尾字母位置 - 首字母位置 + 1我们直接从后遍历该字符串,先找到最后一个单词的末尾,当我们第一次遇到s[i]!=’ ',那么此时即为最后一。

2023-11-01 19:22:48 31

原创 地图构建算法——占据栅格地图构建算法

综上所示占据栅格地图构建算法是属于栅格地图法里面的一种,占用栅格地图构建描述了这样一个问题:假设机器入的位姿已知,如何利用有噪声和不确定的测量数据生成一致性地图。解释一下什么是截断问题,计算机的位数是有限的,当概率靠近0的时候可能位数不足够就需要舍去一些位数,那么造成了数据的不精确,而如果我们用对数表示,那么就可以避免这个问题。具有真实物理尺寸的地图,但是通常按照地图的分辨率来划分尺寸,如栅格地图,特征地图,点云地图等,常用于地图构建,SLAM,路径规划等方面。为了方便直接截图啦hhh。

2023-10-31 19:41:49 2494 1

原创 leetcode面试经典150题——18 整数转罗马数字

我们做一张9行4列的表,由于数num最大只可能是4位数,那么我们就把num分成个十百千位,然后讨论每一位上面从1-9的对应的罗马数字,这个9行四列的表用四个数组进行存储,数组的下标即表示罗马数字对应的值。同样地,数字 9 表示为 IX。我们把每一种可能出现的字母或者字母序列全部列出来,并且按照他们的值的大小从大到小进行排序,然后对于num,我们从大到小去比较罗马数字,如果能用该罗马数字表示,把这个罗马数字记录下来,再减去罗马数字表示的值。罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

2023-10-31 19:35:32 62

原创 leetcode面试经典150题——17 罗马数字转整数

罗马数字和其对应的值我们可以利用unordered_map来存储,罗马数字作为关键字,其值作为关键字的值,在遍历字符串的时候,查找关键字对应的值即可,然后再按照一定的条件进行加减即可。我们当小的元素在大的元素右边时候,直接加上元素的值,如果发现小的元素出现在大的元素的左边的时候,累加上用大的元素减去小的元素的值,然后跳过这两个使用过的元素。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

2023-10-29 14:14:03 68

原创 leetcode面试经典150题——16接雨水##leetcode官网讲解双指针方法错误?

方法一:我们一共接到的雨水量等于每个柱子接到的雨水量,所以我们把求解一共接到的雨水量划分为求解每个柱子接到的雨水量这样的子问题,对于柱子i,它能够接到的最大雨水量,应该是取决于它左右两边最高的柱子中较小的一个(短板效应),然后再减去柱子i本身的高度,即为柱子i能够接到的雨水量,这样我们遍历数组,求得每个柱子能够接到的雨水量最后再求和。解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。空间复杂度:o(n)

2023-10-28 21:10:01 289

原创 leetcode面试经典150题——15分发糖果

我们把孩子看成是一个数组,第一次从左往右遍历,我们要找出若干个递增的子序列,这个子序列满足后一个比前一个糖果多一,如果遇到不满足递增的元素,我们不满足的元素糖果置1,再从这个糖果往后找递增子序列,但是我们遍历结束后,我们只对这些正向递增的子序列做了处理,那么剩下的没处理的孩子就是反向递增的子序列,所以我们从右往左遍历,找到递增的子序列,同样的操作,最后我们对于每个元素,要同时满足这两个条件,那就是取最大的糖果数。n 个孩子站成一排。1.如果他比左边的孩子评分高,那么他的糖果应该为左边孩子的糖果+1。

2023-10-26 20:09:56 116

原创 leetcode面试经典150题——14加油站

我们从0号加油站开始,如果我们遇到了第一个不能到达的加油站,那么我们从0号和这个加油站之间的加油站出发,也肯定不能够到达这个加油站,因为假设有中间的加油站,那么在这个中间的加油站出发剩余的油量,肯定是小于等于从0号加油站开到这个中间加油站的油量的,所以中间的加油站肯定也不能够到达第一个不能到达的加油站,所以我们应该从第一个不能到达的加油站继续寻找,这样就只需要遍历一遍数组,时间复杂度为o(n).输入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]因此,3 可为起始索引。

2023-10-25 15:23:31 127

原创 leetcode面试经典150题——13除自身以外数组的乘积

我们知道answer[i]表示除了nums[i]以外所有元素的乘积,那么我们如果把他们按照相对nums[i]的位置,我们可以分为左边的部分left,和右边的部分right,那么answer[i]就能表示nums[i]左边部分的乘积乘以右边部分的乘积。而left[i] = left[i-1]*nums[i-1],i-1左边所有的元素乘以i-1就是i左边所有的元素,同理rigjt[i] = right[i+1]*nums[i+1].最后answer[i] = left[i]*right[i].

2023-10-24 17:43:20 73

原创 c++——浅谈map和unordered_map

通过上述二者的区别和联系,我们大概可以区分什么时候用哪一种,如果我们注重查找插入效率,我们应该选择unordered_map,而我们如果注重存储效率,我们应该选用map,或者我们注重存储的元素是要有序的,我们应该使用map,换句话说,如果关键字类型固有就是无序的,或者性能测试发现问题可以通过哈希技术解决,那么可以使用无序容器unordered_map.

2023-10-23 20:31:24 627

原创 C++——关于指针,一级指针,二级指针

我们知道指针分为一级指针,二级指针…n级指针,其中一级指针指向其类型的对象,二级指针指向一级指针,以此类推n级指针指向n-1级指针,需要注意的是,上一级指针指向下一级指针,上一级指针的类型要保持和其指向下一级指针的类型相同(void类型指针除外),在本文中假定其类型都相同。

2023-10-23 16:32:16 107

原创 leetcode面试经典150题——12O(1) 时间插入、删除和获取随机元素

由题目所述,集合中的每个元素都是唯一的,并且集合的所有操作都是o(1)的时间复杂度,而用我们的vector来进行查找查找,时间复杂度为o(n),所以我们联想到hashmap,hashmap的插入删除查找操作的时间复杂度为o(1),由于我们需要进行访问随机数,那么我们再定义一个动态数组,map中的键为该元素,保证的元素的唯一,值为该元素在动态数组中的下标。// 由于 2 是集合中唯一的数字,getRandom 总是返回 2。// 向集合中插入 2。// 返回 false ,表示集合中不存在 2。

2023-10-23 10:58:21 49

原创 leetcode面试经典150题——11H 指数

方法三:计数排序,由方法二可知,我们时间复杂度主要由排序算法决定,那么我们考虑用计数排序来进行优化,申请一个长度为n+1的数组nums,nums[i]表示论文被引用次数为i的论文篇数,由于H指数不可能超过n,那么对应被引用次数大于n的论文,我们存储到nums[n]中,最后从后往前遍历nums,记录被引用次数>=i的论文总数,然后判断是否>=i,从而得出H的值.排序为快速排序,时间复杂度为o(nlogn),后面只需遍历一遍数组,总的时间复杂度为:o(nlogn)快速排序的空间复杂度为o(logn)

2023-10-22 15:15:57 169 1

原创 leetcode面试经典150题——10跳跃游戏 II

与跳跃游戏1不同的是,此题要求的是最少的跳跃次数,同样我们维护一个动态的最大可跳跃距离maxDis,并且我们在这个范围内,找到最大的可跳跃距离,再跳到此处,重复,即可求得最少的跳跃次数,那么我们如何求在这个范围内的最大可跳跃距离呢,我们设置一个边界,刚开始边界为0,在没有达到边界的时候,我们不断更新maxDis,当我们达到边界的时候,更新边界的值为maxDis,也就是选择跳跃到了可以到达最大范围的一个元素,并且次数加一。初始位置为 nums[0]。输入: nums = [2,3,1,1,4]

2023-10-21 11:29:35 97 1

原创 leetcode面试经典150题——09跳跃游戏

假设数组中每个元素均大于0,那么我们肯定可以跳到最后一位,最简单的情况,每次跳一格,由于题目只要求我们考虑能不能跳到最后一格,所以我们只要需要考虑去避开数组中为0的元素,也就是要跳过数组中为0的元素,因此我们遍历数组,遇到为0的数组的时候,我们就往回遍历,看看有没有能够跳过0的元素,如果有我们就忽略掉这个0,继续往后遍历,如果没有能够跳过这个0的元素,我们就不能够到达最后一位,输出false,注意当我们0元素在最后一个位置的时候,我们只需要跳到这个0元素上就可以,而不需要跳过这个0元素。

2023-10-20 19:52:17 75 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除