自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录训练营day11打卡

如果我们仅仅是一直遍历字符串判断是否有相邻元素,那么时间开销将会巨大。这里我们可以注意到当这一轮的相邻元素删除后,判断遍历到的新的元素是否存在相邻元素,这里我们会将之前最近的不同元素进行比较,这种最近元素元素先判断的特性和栈的后进先出特性一致,因此我们可以通过栈的数据结构实现题目要求。当我们遇到数字时,先将数字压入栈中,遇到运算符时,将栈顶的两个元素弹出进行运算,然后将结果压入栈中,继续后面的计算,后续过程重复上述流程,直到遍历完tokens数组,我们取出栈顶元素,该元素即是逆波兰表达式的最终结果。

2024-04-29 00:43:11 1469

原创 代码随想录训练营day10打卡

由于栈是后进先出,与队列的pop顺序相反,因此我们使用两个栈实现,将stackin先弹出的元素压入栈stackout,然后stackout的pop顺序就和队列一致了,MyQueue的pop实现需要注意的是,每次要弹出的时候,需要先判断stackout是否还有元素,如果有元素就直接弹出,而不是先将stackin的剩余元素压入stackout,这样会导致顺序错乱,后进入stackin的元素先pop出去。当stackout为空时,再将stackin的元素全部压入stackout,以保证顺序一致。

2024-04-27 13:35:32 378

原创 代码随想录训练营day09打卡

next[j]的后续元素实现方法和模式串匹配类似,我们从下标i=1开始,依次比较前后缀,如果相等,就将j++,然后将j赋值给next[i],说明这一段存在长度为j+1的最长相等前后缀,然后i后移,从之前的最长相等前后缀进行比较,如果当前元素(也就是前面子串的后缀的后一个位置)不同,则回退到前缀,比较前缀的后一个位置,如果依然不同,则将该前缀看成后缀,寻找该前缀的相等前缀(因此这个过程是递归的),最后j指针回退到-1或者能匹配上的第一个前缀末尾。如果匹配上,将j++,此时再将j的位置赋给next[i]。

2024-04-26 16:47:30 496 1

原创 代码随想录训练营day08打卡

同理我们定义快慢指针,慢指针指向单词的开头,快指针指向单词的结尾(判断条件是遇到空格或者到达字符串的结尾处),然后将[慢指针,快指针)区间内的字母进行反转。然后将快指针指向原数组的末尾,慢指针指向扩容后的数组的末尾。这样同时往前移动时,慢指针永远在快指针后面,因此快指针并不会覆盖掉慢指针的元素,当快慢指针同时遍历到开头时,完成字符到单词的替换。,如果该单词的首字母不是在开头(即下标为0的位置)我们在慢指针处增加一个空格,然后将快指针所指向的一连串字母(即一个完整单词)赋值给慢指针,条件满足应当是。

2024-04-25 16:10:36 548 1

原创 代码随想录训练营day07打卡

将A和B看成两数相加中的nums1和nums2,后续处理方法类似,通过将A存入mapA中,value值保存该key值的次数,然后遍历-nums3[k]-nums4[l](因为满足条件的四元组是nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0。因为目标和值target为0(大于等于0),当i指针指向元素大于0时(由于数组排完序,后续所有元素都大于0),因此三个指针位置的值相加必定不满足条件,可以后续遍历(因为后续遍历i后移,第一个值依然大于0):即。

2024-04-25 15:15:16 590 1

原创 代码随想录训练营day06打卡

然后为了比较字符串s和t,我们先将s的每个字符存入hash[26]中,然后再遍历t的每一个字符,每遍历到一次,就将该字符的频率-1,最后再遍历hash[26],如果全部值都为0,则完全遍历,输出ture,如果遍历过程有一个不为0,说明不是字母异位词,因此输出false。哈希表的应用:其实本题就是比较两个字符串中每个字母出现的次数是否相等,我们使用一个hash[26]代表a字母到z字母的出现次数,由于a到z的ASCII码是连续的,因此用该字符-'a'的值对应了0-25,分别是数组hash[26]的对应下标。

2024-04-23 15:36:47 1293

原创 代码随想录训练营day04打卡

通过双指针实现,设置一个快指针和一个慢指针,快指针每次走两步,慢指针每次走一步(与田径跑道长跑比赛类似),当链表存在环时,快指针比慢指针多跑1圈(一圈的情况是慢指针进入环后快指针还未跑完一圈环长度)或N圈(N圈的情况是慢指针进入环之前快指针已经跑了1圈或者多圈环长度)。假设环之前的长度为x,环的入口到第一次相遇的长度为y,环的剩余长度为z,那么环的长度就是y+z,当第一次相遇,慢指针走了x+y步,快指针走了x+y+n*(z+y)步,即多走了n圈,又由于快指针移动长度为慢指针的2倍,因此。

2024-04-22 17:38:14 1601

原创 代码随想录训练营day02打卡

为了使每一次循环步长相同,从左到右,从上到下,从右到左,从下到上分都移动相同的长度,即left->right-1;如果不使用双指针算法,两重循环的复杂度是O(n^2) .通过滑动窗口(双指针模板中的一种),第二个指针不用回溯,因此两个指针分别走n趟,因此优化了朴素算法,复杂度是O(n)。的大小,将较大的数字加入到新的数组newnums中。通过双指针实现,第一指针从数组开头往后面遍历,第二个指针从数组末尾往前面遍历,比较。每一轮循环走最外面的一圈,一共循环n/2次,如果n是奇数,最后还要单独给中心的元素。

2024-04-19 00:44:51 350

原创 代码随想录训练营day01打卡

由于原数组有序,因此每一轮将目标值和数组的中间值进行比较,如果目标值小于中间值,则在左边进行新一轮遍历;当目标值与中间值相等时,返回mid(即中间值下标),当遍历完成后,如果都没有执行return语句(即没有找到),return -1;设置快慢指针,快指针j负责遍历整个数组,用于寻找符合条件的元素,慢指针i用于存储该元素。保证每一轮都是左闭右闭或者都是左闭右开。如果是左闭右闭,则新的一轮遍历是。如果是左闭右开,则新的一轮遍历是。,并且初始right值为。,并且初始right值为。

2024-04-17 17:05:28 394

空空如也

空空如也

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

TA关注的人

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