快乐小脾孩
码龄5年
关注
提问 私信
  • 博客:37,244
    37,244
    总访问量
  • 54
    原创
  • 700,500
    排名
  • 141
    粉丝
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2020-05-26
博客简介:

weixin_48144140的博客

查看详细资料
个人成就
  • 获得209次点赞
  • 内容获得24次评论
  • 获得385次收藏
  • 代码片获得1,786次分享
创作历程
  • 5篇
    2024年
  • 43篇
    2023年
  • 6篇
    2021年
成就勋章
TA的专栏
  • Python
    6篇
创作活动更多

2024 博客之星年度评选报名已开启

博主的专属年度盛宴,一年仅有一次!MAC mini、大疆无人机、华为手表等精美奖品等你来拿!

去参加
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

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

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

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

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

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

Ubuntu20.04配置ALOAM
原创
发布博客 2024.01.11 ·
3557 阅读 ·
19 点赞 ·
4 评论 ·
62 收藏

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 ·
1246 阅读 ·
9 点赞 ·
0 评论 ·
8 收藏

算法题之哈希表系列

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

迁移Ubuntu报错问题

然后再进行迁移工作,发现迁移成功,使用命令查看迁移后的目录,发现Ubuntu20.04被迁移到D盘中。使用LxRunOffline-v3.5.0-mingw迁移Ubuntu至非系统盘时,出现如下报错。
原创
发布博客 2023.12.29 ·
742 阅读 ·
8 点赞 ·
0 评论 ·
7 收藏

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 ·
570 阅读 ·
10 点赞 ·
0 评论 ·
7 收藏

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

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

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 ·
1103 阅读 ·
14 点赞 ·
0 评论 ·
14 收藏

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 ·
735 阅读 ·
8 点赞 ·
0 评论 ·
6 收藏

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 ·
650 阅读 ·
8 点赞 ·
0 评论 ·
8 收藏

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

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

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

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

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 ·
455 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

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

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

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

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

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

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

奇异值分解(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 ·
10754 阅读 ·
20 点赞 ·
4 评论 ·
141 收藏

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

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

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 ·
191 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多