自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 中缀表达式转换为后缀表达式

【代码】中缀表达式转换为后缀表达式。

2023-10-15 20:59:24 256

原创 LeetCode 150.逆波兰表达式求值

本题使用栈来进行存储遍历到的数据,当我们遍历到数字的时候将该数字入栈,如果遍历到运算符就出栈两个数进行运算符的操作,然后将结果入栈。最终剩下的栈顶元素就是我们需要的答案。首先我们需要知道什么是逆波兰表达式,像我们平常遇到的都是中缀表达式,然而逆波兰确实后缀表达式,因此这个题目隐含的意思就是将一个后缀表达式转换为中缀表达式,并计算它的值。

2023-10-15 19:30:07 368

原创 LeetCode 24.两两交换链表中的结点

然后我们可以创建一个虚拟的头结点,然后如图所示定义几个结点指针,经过图中的顺序进行交换结点,然后将结点依次向后遍历。首先可以特判一下,如果结点数目小于等于1,则直接返回即可,因为数目小于等于1就不需要交换了。同时我们也要注意cur和next不能为nullptr,若为nullptr就不需要交换。

2023-10-09 16:13:33 258

原创 LeetCode 143.重排链表

具体用到的就是我们之前的知识的结合,首先使用快慢指针找到链表的中间结点。然后将后半段链表给翻转一下,然后再让这两个链表进行合并。分析题目后我们可以直接进行模拟实现。

2023-10-09 15:58:18 372

原创 LeetCode 152. 乘积最大子数组

但是本题的重难点是有可能出现负数,如果当前元素是负数的情况下,我们就要去找上一个dp表位置出现的最小值而不是最大值。该题我们使用动态规划的方法进行解决,其主要思想就是创建一个dp表,dp表中来记录以某一个位置为结尾的最大乘积。因此我们需要定义两个dp表,一个记录以当前位置为结尾的最小值,一个记录以当前位置为结尾的最大值。

2023-09-26 15:28:41 82

原创 LeetCode 75.颜色分类

我们需要做的就是遍历数组,让值为0的数与数组前边的值进行交换, 值为2的数与数组后面的数进行交换,剩下的就是1的数了。题意很清楚,让0,1,2按照顺序排好,但是不能使用sort库函数。// [i,right] 未排序的。

2023-09-26 15:24:43 103

原创 LeetCode 287. 寻找重复数

当fast和slow同时从起点出发然后在相遇点相遇,fast走的路程 fast=L+n*C+x,(C圆圈的周长 n是一共有几圈),slow走的路程 slow=L+x。由于fast的速度是slow的两倍 (L+x)*2=L+n*C+x,我们假设一圈就能追上 可得 L=C-x,我们先算出相遇点。如果有相同的元素,那么就必然会形成环,那么只要去证明是否存在环即可。然后通过起点到相遇点的距离等于相遇点到如入环点的距离即L=C-x,算出入环点的位置 也就是此题的答案。

2023-09-26 15:19:43 275

原创 LeetCode 146. LRU 缓存

我们在此需要自己实现一个双向链表供我们使用,为了更好的通过某个结点的key来访问到该结点,我们使用哈希表将key和对应的结点进行存储。一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。我们就视为该节点刚刚被访问了,因此就将该节点插入该双向链表的头结点处。LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的。若超过该缓存的capacity就将该双向链表的尾结点进行删除。

2023-09-23 14:32:57 199

原创 LeetCode 23. 合并 K 个升序链表

首先我们实现一个合并两个有序链表的操作,然后使用归并的思想对数组中的链表进行排序。

2023-09-21 16:10:49 349

原创 LeetCode 25. K 个一组翻转链表

每次翻转一小段之前首先判断一下接下里我们要翻转的这一小段的长度是否符合条件,若不符合直接返回头结点。创建一个哨兵位头结点,然后将其链接在原来头结点的前边,以便于我们后面的便利使用。若符合,则仿照反转链表的方式(头插法)来进行一小段一小段的反转链表。

2023-09-21 16:00:30 154

原创 LeetCode 240. 搜索二维矩阵 II

判断矩阵右上角的点与target做大小判断,可以一次排除一列或者一行这种高效的算法来找到我们需要找的点。如果该点比target大,说明该点以及这一列的点都大于target因此直接将这一列排除。如果该点比target小,说明该点以及这一行的点都小于target因此直接将这一行排除。若相等直接返回true。

2023-09-21 15:52:13 242

原创 LeetCode 54. 螺旋矩阵

当遍历第一列的时候需要满足y1

2023-09-20 19:40:20 244

原创 LeetCode 73. 矩阵置零

1、定义两个变量,flag_col0与flag_row0。分别代表第一列和第一行是否为0。我们只需要遍历第一行和第一列,只要遇见0则对应的第一行和第一列就赋值为true.2、我们使用第一行和第一列的数来去记录该行是否出现0,和该列是否出现0.若某行出现0,则该数所对应的第一行与第一列的数设为0.4、根据flag_col0与flag_row0来去对第一行和第一列进行赋值。3、根据第一行与第一列的情况来对整个数组(除了第一行和第一列)进行赋值。

2023-09-20 19:35:10 378

原创 LeetCode 42. 接雨水

首先定义两个数组left_Max,right_Max来去计算每个位置的雨水可以到达的最大高度,然后遍历height用每个位置雨水达到的最大高度减去当前位置的高度,相加之后返回结果即可。每个位置的面积等于(该位置左边包括自己最大的高度)与(该位置右边包括自己最大的高度)中最小的那个数,然后减去当前位置的高度,就是当前位置可以存放的雨水。需要初始化 right_Max[n-1]=height[n-1] 如果右边没有元素的情况下直接取自己即可。

2023-09-20 18:52:27 246

原创 LeetCode 394. 字符串解码

我们首先创建一个栈,栈中的数据是一个个的键值对{count,ans.size()};分别是当前字符串重复的次数,和当前字符串在ans的其实下标。ans代表的是遍历到当前字符的正确答案。当遍历到 ']' 则开始进行对此时的一对中括号中的数进行操作,然后出栈此时的栈顶元素,因为此时栈顶已经被使用过了。当遍历到 '[' 将此时的count与此时的ans的长度(也就是此时这一小段重复元素的起始位置)给记录到栈中。使用栈来很好的解决每一个中括号(包含前边的数字)的重复插入问题。

2023-09-18 20:05:56 462

原创 LeetCode 19. 删除链表的倒数第 N 个结点

我们首先通过n的值来找到需要删去结点的前一个结点的值 target=count-n;count是结点总数,然而我们的头结点向后移动target-1次就可以移动到需要删除节点的前一个结点,然后将该结点cur->next=cur->next->next;就可以很容易的删除该结点。注意:可能需要我们删除的结点是第一个结点,那么我们只需要返回头结点的下一位就可以了,return head->next;

2023-09-15 16:47:21 142

原创 LeetCode 2. 两数相加

如果两个数长度不同,那么让那个短的位补0,也就是当一个数还没遍历完,但是另一个数已经遍历完毕了,那么就让短的那个数遍历的结点填补0。最后还要判断是否有进位,如果有进位,那么把该数继续接入链表后面,说明最后一次相加的时候有进位没有进行处理。我们模拟两个数相加,遍历两个链表。至于顺序,虽然是相反的,但是我们重新创建一个带头结点的链表的时候,直接让两个数相加就可以了进位向后面链接就行!两个数相加sum=num1+num2+carry,下一位需要进的位carry=sum/10,当前位剩下的数sum%10。

2023-09-15 16:43:11 234

原创 LeetCode 21. 合并两个有序链表

定义一个哨兵位的头结点,然后遍历这两个链表将小的结点放前面。然后再判断这两个链表其中哪一个没有遍历完毕,然后将没有遍历完毕的那个接在后面。

2023-09-15 16:35:27 159

原创 LeetCode 41. 缺失的第一个正数

我们可以直接将数组中的数放到哈希表中,然后遍历[1,n],n为数组的大小,当遍历到某个数没有出现过的时候,就返回,若遍历完毕也没有,则返回n+1。它的绝对值是否符合条件,然后再使用该值进行进行进一步的赋值给对应绝对值数-1。很可能之前已经被标记了,也就是已经被赋值为负数了,因此我们需要检测的是。2、将在[1,n]的数转化为负数并且赋值到该数组对应数-1的下标位置。注意:切记切记我们在进行第二步的时候需要注意的是,遍历的这个位置。3、返回数组中第一个不为负数的数+1。1、将负数转换为n+1。

2023-09-13 10:36:05 397

原创 LeetCode 238. 除自身以外数组的乘积

使用前缀和进行解决该题,只不过与之前前缀和不同的是这个题目计算前缀和的时候不需要计算当前元素,也就是当前位置前缀和的值其实是不包含当前元素的前缀和。法二:只需要定义一个数组,先计算前缀和,然后使用一个变量记录后缀和与之相乘,只需要遍历的过程中乘上后缀和即可。我们算出该位置的前缀和(不包含当前元素),后缀和(不包含当前元素)。法一:我们直接定义三个数组,一个记录最终结果,一个计算前缀和,一个计算后缀和。

2023-09-13 09:11:14 107

原创 LeetCode 56. 合并区间

创建一个ret数组,若此时ret还为空,遍历到的左右边界直接插入即可,若ret不为空,但是此时ret数组的右边界小于此时遍历到的左边界,可知此时遍历的区间必定不会重叠,直接插入即可。若重叠,取此时ret数组的右边界与此时遍历的右边界的最大值即可。我们首先将nums数组排序(以nums中的每个数组的第一个值来进行排序),然后遍历该数组。

2023-09-12 09:23:12 212

原创 LeetCode 53. 最大子数组和

由于dp表存的是以当前下标为结尾的最大子数组和,因此我们填表的时候需要判断,如果当前下标对应的数组值与前一个位置的dp表所对应位置的和大于该位置对应的数组值那么该位置就为dp[i-1]+nums[i-1],反之为nums[i-1],需要注意的是因为我们填dp表的第一个位置的时候会访问到-1下标的位置,因此我们给dp表多开辟一个位置来解决这个问题。使用动态规划的方法进行解决,我们创建一个dp表,用来记录以该下标为结尾的最大子数组。多创建一个位置来防止填写第一个位置的时候访问到-1下标。

2023-09-12 08:40:32 134

原创 LeetCode 76. 最小覆盖子串

通过题意可知,我们要从s字符串中找到包含t字符串的最小子串,因此我们可以通过哈希的方式来计算字符串中含有字符的次数和种类映射。定义两个哈希表,一个用来映射s字符串,一个用来映射t字符串。

2023-09-12 08:15:15 131

原创 LeetCode 35. 搜索插入位置

当mid=left+(right-left)下标所对应的数大于等于target的时候,说明target落在了mid的左边,因此应该改变right=mid;当mid=left+(right-left)下标所对应的数小于target的时候,说明target落在了mid的右边,此时应改变left=mid+1;该题我们可以采用二分查找的方式,我们可以把数组分为,小于target的一边儿和大于等于target的一边儿。最后考虑一下如果target大于该数组的最后一个元素的时候应该返回的下标。

2023-09-12 07:14:05 214

原创 LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置

在使用二分找左端点下标和右端点下标的时候,需要注意的一点是求mid的时候,可能造成死循环的情况,因此我们求左端点的时候mid=left+(right-left)/2;来求,防止就剩两个元素的时候right与mid相等造成死循环,右端点同上只不过mid=left(right-left+1)/2;使用二分查找的方式,分左右端进行查找。首先使用二分找到左端的端点下标,然后在使用二分找到右端的端点下标。left==right的时候并不能停止循环,因为此时我们还要继续判断,因为我们判断的条件中含有相等这个。

2023-09-11 21:23:29 222

原创 LeetCode 904. 水果成篮

我们使用哈希表来记录当前水果出现的次数,当哈希表中已经有两种水果的时候,下次再摘第三种水果,就应该将前面的水果进行拿出,直到当前种类恢复到两种为止。使用滑动窗口思想,遍历到之后就进窗口,当种类超过2时就从左边进行出窗口,然后每次遍历的结尾去获取最长的子串长度。我们利用一个数组来代替unordered_map,来减少空间的开辟,并且使用一个变量来记录当前的水果种类。在你去摘水果的时候,你当前只能拥有两种种类的水果,若想拿第三种水果,就需要发下前两种水果中的一种。

2023-09-07 11:27:24 288

原创 LeetCode 1658. 将 x 减到 0 的最小操作数

有种说法叫做,正难则反。我们直接去按照题目意思去求很难去理解与操作,但是我们换种思想就会简单许多。我们让整个数组的和减去x得到一个target,然后去求该数组中和等于target的最长子串,那么原数组长度减去该最长子串的结果就是答案。有可能该x太大,就算把整个数组的和加起来也没有x大,那么这样就是不符合条件的,因此直接返回-1;还有一种情况,该数组中根本就没有符合条件的,也直接返回-1;

2023-09-07 11:06:28 298

原创 LeetCode 1004.最大连续1的个数

这样思路就清晰了许多,那么我们使用一个zero变量来记录0的个数,利用滑动窗口思想来解决,若当前进窗口的值是0那么zero++,若出窗口的该值是0那么zero--,保证zero

2023-09-07 10:43:08 334

原创 LeetCode 3. 无重复字符的最长子串

我们需要找的是含重复元素的最长子串,当然直接暴力求解固然简单。但是可能引发的情况是超时,而且面试官想看到的也不是让你去暴力解决这类问题。因此我们使用哈希+滑动窗口的思想来解决。

2023-09-07 10:26:47 638

原创 LeetCode 209 长度最小的子数组

使用滑动窗口,每遍历一个数就进窗口。然后判断当前的数组和是否>=target,若条件成立则更新结果并且出窗口。若没有符合条件的则返回0。

2023-09-06 18:49:53 177

原创 LeetCode 18 四数之和

固定两个数,然后利用双指针来进行剩下两个数的筛选。主要使用的是三数之和的思想,具体可以看我上篇博客。

2023-09-06 17:44:42 526

原创 LeetCode 15 三数之和

/ 2. 固定一个值nums[i] 然后去剩下的位置去找 两数之和符合nums[j]+nums[k]是否等于-nums[i]// 3. 细节问题:由于题目中是不可以包含重复的三元组的,因此我们需要对我们所选的三个数进行去重。// 1. 排序+双指针。

2023-09-06 17:41:50 549

原创 LeetCode 202 快乐数

使用哈希表循环判断每次经过平方和的数,如果为1则直接返回true,若之前存在过但不为1则直接返回false。判断相遇的时候是否为1,若不为1则返回false,若为1则返回true。

2023-09-06 17:38:13 393

原创 LeetCode——顺时针打印矩形

按照顺时针一次遍历,遍历外外层遍历里层。

2023-09-05 21:00:58 336

原创 LeetCode —— 复写零(双指针)

将数组中出现的每个零复写一遍,然后将其他元素向右平移,数组长度不能改变。

2023-09-05 20:33:24 590

原创 LeetCode 热题 100——找到字符串中所有字母异位词(滑动窗口)

该题只存放了小写字母,因此我们检查两个哈希表其实时间复杂度是非常低的,倘若存入的不止是小写字母,那么我们检查的这一步操作时间复杂度就会非常高,并且检查的这一步操作每一次滑动的时候我们都要进行检测,因此我们可以使用一个count来记录s_hash哈希表中有效字符(存在的字符是p_hash中的字符)的数量,进窗口的时候我们将count++,出窗口的时候我们将count--。窗口大小一直为p字符串的大小,并且我们出窗口和进窗口的大小是相同的,就相当于我们拿着一个窗口在s字符串上去滑动,直到我们找到合适的子串。

2023-09-04 20:28:03 471

原创 LeetCode 热题 100——无重复字符的最长子串(滑动窗口)

原因是我们原字符串中的a并没有移走,因此,我们就算以第二个字符作为起点,等到遍历到第二个a的时候依然是重复的,那么我们能不能遍历的时候先把重复的元素给移除掉,然后再进行遍历呢?依次以第一个、第二个、第三个等等为起点去遍历字符串,并且找出不连续子串的最大长度。注意五角星的位置,我们能发现当我们依次去使用第二个字符为起点的时候,依然是遍历到了此位置,那么是为什么呢?从s字符串中,去找出连续的子串,使该子串中没有重复字符,返回它的最长长度。那么我们就引出了我们的滑动窗口操作。出窗口 -- 从哈希表中删除该字符。

2023-09-04 17:29:06 432

原创 Linux——守护进程

不受用户登录、注销影响的进程称为守护进程。

2023-08-31 20:39:44 396

原创 LeetCode——只出现一次的数字II(位运算方法/哈希方法)

来分别存放<数,该数出现的次数>,然后遍历求出每个数出现的次数,然后再遍历哈希表,来求出只出现一次的数!因此我们可以发现,对某一位求和并对3取模之后得到的二进制位值恰好是只出现一次的那个数的二进制位的值,因此我们可以利用这一点来求出这个只出现一次的数。由于前边的条件,那么我们可以得出,某一个二进制位的和肯定满足一下四种情况的一种!由题我们能知道该数组中只有一个数出现了一次,然而其他的数都出现了3次。对该值进行对3取模 为0;对该值进行对3取模 为1;对该值进行对3取模 为0;对该值进行对3取模 为1;

2023-08-09 11:33:58 214

原创 HTTP协议

一切你在网络上看到的都是文件(视频、音乐、文章等等)。这些文件存放在你的服务器上 -->因此需要Linux系统的路径结构来从服务器上拿到这些资源。因为文件资源种类特别多,http都能搞定,所以:http叫做超文本传输协议!

2023-07-29 18:34:18 152

空空如也

空空如也

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

TA关注的人

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