自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 每日一题(LeetCode)----二叉树--二叉树的层平均值

4.我们将队列中的首元素出列,并将其不为空的左孩子和右孩子入队,然后当前层总和加上当前节点的值,当前层元素个数-1,当当前层元素个数变为0时,我们将当前层总和除以当前层元素总数的值放入到我们的结果数组中,并获取下一层元素个数,下一层元素的总数重复这个操作,直到队列为空结束。1.使用一个队列 其中元素的类型为node类型的指针(这里的队列我们用的是c++中封装好的,其实是模板类,我们这里是通过模板类创建了一个对象)和一个结果数组,结果数组用来存最终的结果。, 以数组的形式返回每一层节点的平均值。

2023-12-28 18:46:36 506 1

原创 每日一题(LeetCode)----二叉树-- 二叉树的右视图

4.我们将队列中的首元素出列,并将其不为空的左孩子和右孩子入队,然后当前层元素个数-1,当当前层元素个数变为0时,我们将当前元素放入到我们的结果数组中,并获取下一层元素个数,重复这个操作,直到队列为空结束。3.初始时,我们将根节点放入到队列中去,当前层元素个数记为1(提示:每出队列一个元素,那么当前层元素的个数进行-1操作)1.创建一个队列,队列用来存二叉树节点(实际上是地址)和一个结果数组,结果数组用来存最终的结果。,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

2023-12-26 23:19:51 689

原创 每日一题(LeetCode)----栈和队列-- 简化路径

continue;continue;i++;t++;continue;temp++;sta.pop();temp--;sta.pop();temp--;return res;while (!

2023-12-25 17:41:18 948

原创 每日一题(LeetCode)----栈和队列--前 K 个高频元素

3.创建一个优先队列底层是大顶堆的,且这个优先队列中的每一个元素都是一个二元组合(每一个二元组的元素的第二个表示一个数,第一个表示的是这个数出现的次数)1.创建一个哈希表(这里用unordered_map),键值表示我们遍历到的数,实值表示我们遍历到的数出现的次数。4.创建一个结果数组,将优先队列的前k个元素放入到结果数组中即可。2.遍历一遍数组,将遍历到的数以及相应出现的次数存到哈希表中。**进阶:**你所设计算法的时间复杂度。,请你返回其中出现频率前。

2023-12-24 19:38:51 465

原创 每日一题(LeetCode)----栈和队列--滑动窗口最大值

2.初始时,我们先根据k变量的大小,先对数组中前k个元素进行处理,当队列为空时,我们直接把当前遍历到的元素对应的下标放入到队列末尾,当队列不为空时,且当前遍历到的元素的值大于队列末尾下标所对应的数的值,那么我们删除队列的末尾元素,继续与队列末尾元素进行比较,直到当前遍历到的元素的值小于队列末尾下标所对应的数的值,我们将当前元素对应的下标放入到队列的末尾。2.初始时,我们先根据k变量的大小,把数组的前k个元素连带着它们的下标放入到优先队列中去。的滑动窗口从数组的最左侧移动到数组的最右侧。

2023-12-23 21:12:40 924

原创 每日一题(LeetCode)----栈和队列--逆波兰表达式求值

逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。返回一个表示表达式值的整数。

2023-12-20 19:57:29 404

原创 每日一题(LeetCode)----栈和队列--删除字符串中的所有相邻重复项

链接:https://leetcode.cn/problems/remove-all-adjacent-duplicates-in-string/3.使用resize函数将原有字符串进行缩小,得到结果子字符串。在完成所有重复项删除操作后返回最终的字符串。3.把栈中元素放入到结果字符串中,然后返回结果字符串即可。1.我们先创建两根指针指向字符串的第一个元素和第二个元素。在 S 上反复执行重复项删除操作,直到无法继续删除。会选择两个相邻且相同的字母,并删除它们。给出由小写字母组成的字符串。

2023-12-08 20:11:44 446

原创 每日一题(LeetCode)----字符串--重复的子字符串

通过分析:如果数组的长度正好可以被 (数组长度-最长相等前后缀的长度) 整除 ,说明该字符串有重复的子字符串,所以我们先用KMP求出Next数组,然后用分析出来的公式进行判断。另外我们在判断 s + s 拼接的字符串里是否出现一个s的的时候,要刨除 s + s 的首字符和尾字符,这样避免在s+s中搜索出原来的s,我们要搜索的是中间拼接出来的s。判断字符串s是否由重复子串组成,只要两个s拼接在一起,里面还出现一个s的话,就说明是由重复子串组成。,检查是否可以通过由它的一个子串重复多次构成。

2023-12-06 17:32:57 445

原创 每日一题(LeetCode)----字符串--反转字符串 II

反转的次数分为两部分 一部分是我们用字符串的总长度除以2*k得到的数 另一部分是字符串的总长度取余2 * k后得到的数与k和2 * k进行对比,以判断剩下的字符串是否需要进行反转。反转每个下标从 2k的倍数开始的,长度为 k的子串。若该子串长度不足 k,则反转整个子串。,从字符串开头算起,每计数至。

2023-12-05 20:35:23 449

原创 每日一题(LeetCode)----字符串--反转字符串

2.将两根指针所指向的字符进行交换(交换有两种写法),然后左指针向后移动一位,右指针向前移动一位,当左指针大于右指针时,结束交换的操作,就可以得到反转后的字符串了。编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组。修改输入数组、使用 O(1) 的额外空间解决这一问题。1.创建两个指针分别指向字符串的首元素和尾元素。不要给另外的数组分配额外的空间,你必须。

2023-12-04 20:48:13 501 1

原创 每日一题(LeetCode)----哈希表--四数之和

对于这两个数我们需要去重,我们看每一个数的前一个数是否和当前这个数一样,一样的话就说明当前这个数就算有能满足的四元组也是重复的,所以我们要将不满足条件的数向后移动避免获得重复的四元组。3.再确定另外两个数c和d,我们用两个指针指向确定的第一个数的后一位为c,和给出数组的最后一个数为d。4.(1)如果这四个数的和小于目标和,那么我们把左指针向后移动一位,(2)如果这四个数的和大于目标值,那么我们把右指针向前移动一位,请你找出并返回满足下述全部条件且。1.我们先把给出的数组进行排序。

2023-12-03 17:00:52 413

原创 每日一题(LeetCode)----哈希表--三数之和

对于这个数我们需要去重,我们比较它的前一个数是否和当前数一样,一样的话就说明我们这次的数就算有能满足的三元组也是重复的,所以我们将a的下一位作为新的a。3.再确定另外两个数b和c,我们用两个指针指向确定的第一个数的后一位为b,和给出数组的最后一个数为c。4.(1)如果这三个数的和小于目标和,那么我们把左指针向后移动一位,注意:排序后的数组如果第一个数都大于零,那么没有符合条件的三元组。(2)如果这三个数的和大于目标值,那么我们把右指针向前移动一位,**注意:**答案中不可以包含重复的三元组。

2023-12-02 23:05:51 1017

原创 每日一题(LeetCode)----哈希表--赎金信

3.遍历其中一个哈希表,每遍历到哈希表中的一个元素,我们就取出这个元素中的实值(也就是在第一个字符串中当前字符出现的次数),然后以当前哈希表中的键值(在第一个字符串中出现的字符)作为另一个哈希表中的键值(在第二个字符串中出现的字符)取出另一个的实值(也就是在第二个字符串中当前字符出现的次数),将两个实值进行比较,如果第一个实值比第二个实值大,那么返回失败,否则就继续进行遍历,如果遍历完第一个哈希表之后还没有返回失败,那么返回成功。

2023-12-01 19:10:43 511

原创 每日一题(LeetCode)----哈希表--四数相加 II

4.定义一个结果变量,遍历其中一个哈希表,每遍历到哈希表中一个元素,我们取出这个哈希表中的实值,然后以0减去当前哈希表中的键值所得到的数作为另一个哈希表中的键值,取出另一个的实值,取出的这两个实值进行相乘然后加到我们的结果变量上即可。2.创建两个哈希表(这里用unordered_map),两个哈希表的键值都是其组内第一个整数数组中的元素和第二个整数数组中的元素相加所得的数,实值是当前键值的数出现的次数。3.进行遍历,每组中的第一个整数数组的每个数都和第二个整数数组相加一遍,得到的数存入对应的哈希表中。

2023-11-30 11:53:30 522

原创 每日一题(LeetCode)----哈希表--两数之和

1.创建一个哈希表(这里用unordered_map),键值表示我们遍历过的数,键值表示我们遍历过的数对应的下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。**进阶:**你可以想出一个时间复杂度小于。整数,并返回它们的数组下标。你可以按任意顺序返回答案。,请你在该数组中找出。

2023-11-29 18:29:30 527

原创 每日一题(LeetCode)----哈希表--快乐数

根据分析,我们发现下一个值可能比自己大的最大数字必须低于 243。因此,我们知道任何循环都必须包含小于 243 的数字,用这么小的数字,编写一个能找到所有周期的强力程序并不困难。如果这样做,会发现只有一个循环:4→16→37→58→89→145→42→20→4。所有其他数字都在进入这个循环的链上,或者在进入 1 的链上。因此,我们可以硬编码一个包含这些数字的散列集,如果我们达到其中一个数字,那么我们就知道在循环中。1.定义一个慢指针指向第一个数,定义一个快指针指向第一个数进行变换后的数,

2023-11-28 22:30:16 530

原创 每日一题(LeetCode)----哈希表--两个数组的交集

1.创建一个哈希表,这个哈希表中的每个元素的键值表示在数组中出现的元素,实值表示在几个数组中出现过(例如,实值为1表示只在一个数组出现过,实值为2表示在两个数组中都出现了。4.创建一个数组(这里是动态数组)来存两个数组的交集,遍历一遍哈希表,把哈希表中实值为2的元素存入到数组中,然后返回这个数组即可。如果遍历到的元素相等,那么看当前元素与结果数组的尾元素是否相等,如果不相等就放到我们的结果数组中,两个指针同时向后移动一个元素。2.创建一个结果数组(这里用的是动态数组),用来存这两个数组交集。

2023-11-27 14:46:02 422

原创 每日一题(LeetCode)----哈希表--有效的字母异位词

两个字符串分别遍历一遍,每个串中各个字符出现的次数都存到各自的哈希表(这里用的是unordered_map,键值表示我们遍历到的字符,键值表示当前字符出现的次数),然后通过比较两个哈希表来判断这两个串是否为有效的字母异位词。t 是 s的异位词等价于「两个字符串排序后相等」。因此我们可以对字符串 s 和 t 分别排序,看排序后的字符串是否相等即可判断。此外,如果 s 和 t 的长度不同,t 必然不是 s 的异位词。你能否调整你的解法来应对这种情况?中每个字符出现的次数都相同,则称。,编写一个函数来判断。

2023-11-26 21:11:16 592 1

原创 每日一题(LeetCode)----链表--链表中的下一个更大节点

public://pair的第一个变量存的是遍历到节点的下标,第二个变量存的是遍历到的节点的值index++;while(!sta.pop();return ans;

2023-11-25 21:13:31 628

原创 每日一题(LeetCode)----链表--链表最大孪生和

我们使用快慢指针找出后一半部分的起始节点。我们用慢指针和快指针同时指向 头节点,然后,我们每次将慢指针向后移动一个节点,同时快指针向后移动两个节点。当 快指针指向空结点时,慢指针就刚好指向链表了后一半部分的首节点。

2023-11-24 20:25:04 1003 1

原创 每日一题(LeetCode)----链表--两数相加

自己的理解:就是先从前到后先走一遍,算出所有的和作为答案,然后从后往前看有哪个和超过了10,超过了10就继续向后递归,但是递归的对象变为当前进位和它的下一位和,到了递归的终止条件之后,就继续向前返回。把两个链表的 next 节点相加。(注意:如果当前相加的结果 add>=10,需要把 next 节点相加得到的结果 + 1。把两个链表节点的值相加(结果记为 add )。把 add 模 10 作为当前的链表节点的值。的链表,表示两个非负的整数。请你将两个数相加,并以相同形式返回一个表示和的链表。

2023-11-23 20:58:56 502

原创 每日一题(LeetCode)----链表--分隔链表

​ (2)当前节点指向小区间尾节点的下一个节点,然后小区间的尾节点再指向当节点 (3)小区间的尾节点向后移动一个节点,下一次要遍历的节点为pre所指向节点的下一个节点。如果不是 ,(1)我们让pre指向的那个节点的下一个节点变为为当前节点的下一个节点。把比目标值小的节点存一个链表里,把比目标值大的节点另一个链表里。把存比目标值大的节点的链表接到存比目标值小的节点的链表的后面。如果小于,那么看pre所指向的节点是否是小区间的尾节点。给你一个链表的头节点。

2023-11-22 21:33:16 570

原创 每日一题(LeetCode)----链表--两两交换链表中的节点

如果链表中至少有两个节点,则在两两交换链表中的节点之后,原始链表的头节点变成新的链表的第二个节点,原始链表的第二个节点变成新的链表的头节点。(1)我们以通过下标为奇数得到的链表的表头作为新链表的表头,然后用两个指针变量交叉遍历两个链表(交叉遍历就是一个链表向后遍历了一个节点之后就换另一个链表向后遍历一个节点,这样循环,直到两个链表都遍历完成结束)给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。如果当前操作节点的下一个和当前操作节点的下一个的下一个的下一个同时不为空,进行下面操作。

2023-11-21 17:06:25 129

原创 每日一题(LeetCode)----数组--螺旋矩阵

2.然后我们进行遍历,把遍历到的元素放到新创建的vector中,每次遍历一个循环之后,下一次遍历循环的初始位置是当前循环的x坐标+1,y坐标+1(注意刚开始遍历时循环的初始位置是0,0),并且下一次遍历循环的每一条边的长度都要减一。1.我们先根据矩阵的行数和列数(行数/2和列数/2中较小的那个就是循环的次数)确定要从左到右,从上到下,从右到左,从下往上循环几次,​ 如果行数等于1,那么我们从初始位置向右遍历m个元素,并放入到新创建的vector中,然后返回新创建的vector中即可。

2023-11-20 20:01:36 209

原创 每日一题(LeetCode)----数组--水果成篮

如果此时哈希表不满足要求(即哈希表中出现超过两个键值对),那么我们需要不断移动 left,并将 fruits[left]从哈希表中移除,直到哈希表满足要求为止。需要注意的是,将 fruits[left]从哈希表中移除后,如果 fruits[left] 在哈希表中的出现次数减少为 0,需要将对应的键值对从哈希表中移除。我们可以使用滑动窗口解决本题,left 和 right 分别表示满足要求的窗口的左右边界,同时我们使用哈希表存储这个窗口内的数以及出现的次数。这些树用一个整数数组。,返回你可以收集的水果的。

2023-11-14 09:35:53 141

原创 每日一题(LeetCode)----数组--长度最小的子数组

初始时滑动窗口的起始位置和结束位置都是数组的首元素,然后我们向右移动滑动窗口的结束位置,相当于是向右遍历一遍数组,每次我们都看一下滑动窗口的总和是否大于等于目标值,如果大于我们就计算一下当前子数组长度,然后更新一下答案,之后让滑动窗口的起始位置向后移动一位,直到滑动窗口的总和下于目标值了,我们继续向右遍历,直到遍历结束,得到最终的答案。其实滑动窗口就是双指针,我们定义两个指针分别表示滑动窗口的起始位置和结束位置,滑动窗口就是子数组,以此我们就可以求出子数组的总和,看是否符合条件了。,并返回其长度**。

2023-11-12 20:45:02 198

原创 每日一题(LeetCode)----数组--有序数组的平方

通过观察发现正数(包括零)平方后从左向右递增,负数平方后从右向左递增,所以我们先找到第一个不是负数的位置,然后找到最后一个负数的位置,将这组数进行平方操作,并放到一个新创建的vector中,最后从第一个不是负数的位置向左遍历,最后一个负数的位置向右遍历将这两个指针遍历到的数进行比较,然后依次往原有vector中放入排序好的元素注意如果某一指针移至边界了,那么就将另一指针还未遍历到的数依次放入到原有vector中排好序的元素的后面。这种方法无需处理某一指针移动至边界的情况,读者可以仔细思考其精髓所在。

2023-11-11 21:03:01 253

原创 每日一题(LeetCode)----数组--移除元素(四)

最容易想到的方法是将给定的字符串中的退格符和应当被删除的字符都去除,还原给定字符串的一般形式。如果遍历到的是退格字符,那么删除退格字符,然后记录已经遍历到退格字符的数量的变量进行加一操作。如果大于0删除当前遍历到的字符,记录已经遍历到退格字符的数量的变量进行减一操作。两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回。如果遍历到的是字符,那我们看记录已经遍历到退格字符的数量的变量是否大于0。我们用一个变量来存已经遍历到的退格字符的数量。如果小于0,那么不进行操作,进行向前遍历。

2023-11-08 22:19:06 181

原创 每日一题(LeetCode)----数组--移动零

2.遍历原数组,如果遍历到的元素是0,那么我们把它放到非零空间的最后一个元素的后边,同时非零空间向右扩大一位。3.遍历完数组之后,我们返回这个非零空间的长度即可,非零空间的长度为非零空间最后一个元素下标+1。1.我们先申请一个变量,用来记录不等于0的空间(非零空间)的最后一个元素下标(最开始是-1)选定0为标准值,不等于这个标准值的放在非零空间中,等于这个标准值放在得到的非零空间之后即可。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。,编写一个函数将所有。

2023-11-05 20:37:20 162

原创 每日一题(LeetCode)----数组-- 删除有序数组中的重复项

如果右指针指向的元素前一个元素和右指针指向的元素不相同,那么左指针的下一个元素变为右指针当前所指的元素,然后左指针向右移动一位,右指针继续遍历数组。如果右指针指向的元素的前一个元素和右指针指向的元素相同,那么左指针不动,然后右指针继续遍历数组。开始左指针指向数组的开头,右指针指向数组开头的下一个元素,然后右指针向右遍历数组。当右指针遍历完数组之后,左指针所指向的元素的下标+1就是此题的答案。** 删除重复出现的元素,使每个元素。如果所有断言都通过,那么您的题解将被。,返回删除后数组的新长度。

2023-11-05 20:20:39 138

原创 每日一题(LeetCode)----数组--移除元素

如果赋值过来的元素恰好也等于 val\textit{val}val,可以继续把右指针 right\textit{right}right 指向的元素的值赋值过来(左指针 left\textit{left}left 指向的等于 val\textit{val}val 的元素的位置继续被覆盖),直到左指针指向的元素的值不等于 val\textit{val}val 为止。2.遍历原数组,如果遍历到的元素不是要删除的元素,那么我们把它放到新数组的最后一个元素的后边,同时新数组的最后一个元素的下标进行更新进行+1操作。

2023-11-04 22:04:44 260

原创 每日一题(LeetCode)----数组--有效的完全平方数

如果我们找到的数的平方比目标数小,那么二分范围的左边界变为找到的当前数右边的位置,继续进行二分。如果我们找到的数的平方比目标数大,那么二分范围的右边界变为找到的当前数左边的位置,继续进行二分。是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。如果我们找到的数的平方和目标数相等,那么找到了,返回为真,结束操作。如果二分的左边界比右边界大了,那么没找到,返回为假,结束操作。利用二分的思想,二分的范围最开始就是从0开始到目标数结束。)提到了,就不再进行说明了。

2023-11-03 15:58:42 83

原创 每日一题(LeetCode)----数组--x 的平方根

然后我们进行二分,如果我们找到的数的平方比目标数小,那么我们的答案为当前找到的数,然后二分范围的左边界找到的当前数右边的位置,继续进行二分。如果我们如果我们找到的数的平方比目标数大,那么二分范围的右边界变为找到的当前数左边的位置,继续进行二分。利用二分的思想,二分的范围最开始就是从0开始到目标数结束。**注意:**不允许使用任何内置指数函数和算符,例如。由于返回类型是整数,结果只保留。直到左边界比右边界大了,结束操作。

2023-10-31 19:06:27 214

原创 每日一题(LeetCode)----数组--在排序数组中查找元素的第一个和最后一个位置

如果找到了,那么右边界进行更新,更新为当前目标值所在的位置,缩小范围,范围的左边界变为找到的目标值的右边,范围的右边界不变,继续进行查找目标值,重复操作,直到找不到目标值了,那我们就得到了目标值的右边界。如果找到了,那么左边界进行更新,更新为当前目标值所在的位置,缩小范围,范围的右边界变为找到的目标值的左边,范围的左边界不变,继续进行查找目标值,重复操作,直到找不到目标值了,那我们就得到了目标值的左边界。找目标值在数组中出现的左边界和右边界(在找左边界和右边界的过程中顺便就把目标值是否在数组中存在判断了)

2023-10-30 10:39:51 175 2

原创 每日一题(LeetCode)----数组--搜索插入位置

1> 如果当前的数比目标值小的话那么左边界变为中间位置向右一个的位置,继续进行查找。2> 如果当前的数比目标值小的话那么右边界变为中间位置向左一个的位置,继续进行查找。1.先找到这个数组的左边界,再找到这个数组的右边界,此时的范围就是整个数组。因为数组是有序的排列数组,且无重复元素,所以可以使用二分来找下标。(1)数组中找到了目标元素,返回当前目标元素的下标结束。(1)先找到中间位置的那个数,然后与目标值进行比较,(2)目标元素不存在,应在数组的所有元素之前。(3)目标元素不存在,应在所有的元素之后。

2023-10-29 22:47:31 383

原创 关于long double和long后缀的区分

我们都知道long double和long的后缀都为l或L,那这里我们该如何区分呢看下面一段代码。

2023-04-18 14:17:47 272 1

原创 常用的进制转换(学习记录)

小数部分乘2取整,直至为0(如超出部分可舍掉),正序排序。将res看作成最后转换为10进制的结果。方法:整数部分除2取余数,直至商为0,余数倒序排序。所以40的二进制的结果就为101000.一. 2/8/16 进制转换成十进制。二. 10进制转换成2/8/16进制。

2023-04-15 19:23:22 149 1

空空如也

空空如也

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

TA关注的人

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