自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode-707-设计链表

我们需要保存链表的虚拟头节点以及其长度用于遍历链表。其中插入删除的操作需要注意前后指针的指向。类型,值得注意的是,考虑到我们需要先声明后定义,故先声明。对象,这样能够确保返回的是对象指针。值得注意的是,我们使用。

2023-04-07 13:35:33 396

原创 LeetCode-165-比较版本号

时,我们可以计算出当前的版本号。而后我们对比两个字符串的版本号的值,若不相等则直接返回对比结果,否则继续移动指针进行判断。我们可以利用双指针指向两个字符串。

2023-04-07 12:57:47 481

原创 LeetCode-318-最大单词长度乘积

我们可以利用一个长度为26的01串来记录每个字符串中每个字符出现的情况。而后我们只需要遍历整个字符串,并计算任意两个01串之间相与的结果是否为0即可判断是否有重复字符出现,并最终更新长度的乘积即可。

2023-04-03 16:48:13 182

原创 LeetCode-51-N 皇后

在回溯当中,我们按照每行寻找有无可以放置的位置,若此时行数等于总行数则直接将当前结果压入最终结果中。否则我们首先判断当前列、主对角线和副对角线上的所在列是否有人占用,有则直接跳过,否则我们将当前节点位置修改为。记录副对角线上的使用情况。值得注意的是,我们主对角线上的序号是自左下到右上,副对角线上的序号是自左上到右下。递归结束后我们将当前节点的状态改回为之前的状态并修改矩阵的值。我们可以利用回溯搜索所有的可能。记录主对角线上的使用情况,数组。记录每一列的使用情况,数组。

2023-04-03 16:21:56 138

原创 LeetCode-77-组合

记录当前的组合,而后我们开始进行遍历。若当前组合中数字的个数恰好为。我们可以使用回溯进行遍历组合。我们首先利用二维数组。的区间进行循环并不断向记录当前组合的。中添加元素,并在递归调用之后。,我们直接将当前组合加入。

2023-04-03 15:28:25 53

原创 LeetCode-695-岛屿的最大面积

我们可以遍历图中的每一个节点,在遍历之后将其值修改为 0 并将当前面积更新为 1。而后遍历其上下左右四个方向,返回其相邻区域的面积并加上当前的面积,最终返回即可。值得注意的是,为了避免重复查找相同的节点,我们可以直接修改节点的值来进行避免。

2023-04-03 15:22:35 59

原创 LeetCode-1114-按序打印

根据 C++ 标准,在一个线程尝试对一个 mutex 对象进行 unlock 操作时,mutex 对象的所有权必须在这个线程上;也就是说,应该 由同一个线程来对一个 mutex 对象进行 lock 和 unlock 操作,否则会产生未定义行为。基于以上背景,因为 mutex 对象本身是不保护任何数据的,我们只是通过 mutex 的机制来保护数据被同时访问,所以最好 使用 lock_guard 或者 unique_lock 提供的 RAII 机制来管理 mutex 对象,而不是直接操作 mutex 对象;

2023-04-03 15:01:06 92

原创 LeetCode-2367-算术三元组的数目

我们可以直接使用三重循环暴力求解当前满足条件的三元组。

2023-03-31 13:04:33 83

原创 LeetCode-143-重排链表

我们可以首先使用快慢指针进行寻找重点。我们每次让快指针走两步,慢指针走一步,这样当快指针的下一个节点或下下个节点为空节点时说明此时抵达链表中点,我们记录后半段链表的开头并断开两个链表。而后我们利用迭代对链表进行逆序操作,我们设置前置节点former为空指针,而后我们遍历第二个链表的每个节点,记录他的下一个节点并将他的指针指向他的前一个节点。最终我们返回前置节点former即为逆序后的链表头节点。

2023-03-29 21:55:49 228

原创 小红书笔试-3.26

利用哈希表记录每个字符之间的对应关系,遍历原字符串后直接输出。int n;cin >> n;cin >> s;i < 26;这道题想复杂了。实际上只需要从开头开始统计正确递增的子数组的长度,最终用总长度减去总的子数组长度后除以 K 向上取整即可。i < n;j ++;} } }主要是输入输出麻烦,只需要用对应数组一次记录下使用的值,并按照要求执行对应操作即可。

2023-03-26 19:14:21 928

原创 LeetCode-2395-和相等的子数组

我们可以遍历整个数组,将所有可能的子数组和加入哈希集合中,若最终哈希集合的个数不等于。

2023-03-26 13:41:23 94

原创 阿里笔试-3.22

给定一个字符串,判断是否为“ali”型字符串。字符串满足以下条件:字符串仅包含a、l、i三种字母, (包括大写和小写);字符串的开头为仅包含a或者“A"的连续子串;在该子串后面,为仅包含l或者L的连续子串;在该子串后面,为仅包含i或者I的连续子串,该子串结束后将直接到达字符串的结尾用例:输入AAaLlLLiili,输出Yes;输入aAiIlL,输出No;输入alIali,输出No。

2023-03-25 20:57:06 502

原创 LeetCode-1574-删除最短的子数组使剩余数组有序

在获得最后一个非递减数组之后,显然我们现在需要遍历第一个非递减数组,并确定对于第一个非递减数组每一位,最后一个非递减数组中大于等于他的数的位置,并对最短的子数组长度进行更新。若出现第一个子数组非递减的情况则直接跳出循环。考虑到我们需要删除连续的子数组,因此我们最终保留的肯定是第一个非递减数组和最后一个非递减数组中的一部分,因此我们先从后向前进行遍历,找到最后一个非递减数组。

2023-03-25 18:07:53 71

原创 LeetCode-1032-字符流

我们可以对其构建一棵字典树用于后续查找。考虑到我们需要查找的是字符串的后缀是否匹配,因此我们先将字符串逆序之后再对其构建字典树。同时考虑到我们需要匹配当前的字符流,因此我们也从后向前进行遍历,且遍历次数最多为 200 遍,最终判断能否找到对应的字典树末端节点。

2023-03-24 22:54:21 58

原创 阿里巴巴2017实习生笔试题(二)——总结

利用快排的patition思想,基于数组的第k个数来调整,将比第k个数小的都位于数组的左边,比第k个数大的都调整到数组的右边,这样调整后,位于数组右边的k个数最大的k个数(这k个数不一定是排好序的)B车每分钟可以等来1/7辆,因为是相互独立的,相加,每分钟可以等来车12/35辆,那么等来1辆车需要的时间就是=1除以12/35=35/12min,故答案选择C。在内核态下,系统可以无限制的访问内核资源。电池的电量是有概率的,对于 n 节串联的电池,出现电池损坏是概率事件,不存在必然的情况,所以 ABFE 错。

2023-03-22 16:01:19 290

原创 LeetCode-1626-无矛盾的最佳球队

我们一次比较其前面的每一个人,由于数组已经按照分数进行升序排序,故其前方的每一个人的得分都小于等于他。若前方的人年龄小于等于他则说明当前组合合法,我们获得诸多组合中的分数最大值并加上当前球员的得分,并统计所有组合中的最大得分。的形式将分数和年龄集合到一个数组中,而后对其进行升序排列,这样子每一项优先使用分数进行排序,当分数相同时使用年龄进行排序。(值得注意的是,分数相同时使用年龄进行排序能够避免出现相同分数的人年龄无序导致判断错误的情况)个人确定上场时,此时的最高得分。记录当排序后的数组的第。

2023-03-22 10:55:47 64

原创 LeetCode-828-统计子串中的唯一字符

我们可以遍历哈希表中的每一个字符,获得仅包含当前一个字符的子字符串并累加即可获得最终结果。我们可以使用哈希表来记录字符串中每个字符出现的位置。考虑到子字符串必须是连续的,对于字符。而言,假设其上一次出现的位置是。,显然我们可获得的字符串个数为。,下一次出现的位置是。

2023-03-21 13:19:31 56

原创 LeetCode-2469-温度转换

按要求返回相应解即可。

2023-03-21 09:39:04 84

原创 LeetCode-1012-至少有 1 位重复的数字

位位置,前几位产生满足条件的情况数总和。显然比起寻找至少有一位重复的数字,更简单的方法是用总数减去每一位都不重复的数字。指向字符串的末尾时,说明我们已经遍历完当前字符串。为真说明当前合法,返回 1 ,否则返回 0。

2023-03-20 16:02:03 145

原创 LeetCode-1625-执行操作后字典序最小的字符串

考虑到实际上累加和轮转实际上是两个独立的动作,因此我们可以先枚举字符串所有轮转动作。而后对于每一种轮转动作,循环遍历每一种累加的可能,最终找到字典序最小的字符串。值得注意的是,在经过轮转之后,我们下一次移动到的位置与前一次位置之差一定是。的倍数,因此我们可以在轮转时直接加上相应的倍数。

2023-03-19 20:46:10 72

原创 LeetCode-329-矩阵中的最长递增路径

我们首先初始化记忆矩阵,而后对于每一个位置进行搜索。我们在搜索时对记忆矩阵进行判断,若其不为 0 则说明已经有了最长路径,我们直接返回对应的最长路径即可。否则我们向当前位置的四个方向进行搜索,若当前的新位置合法而且新位置上的值大于当前位置上的值,我们则考虑对于记忆矩阵中的最长路径进行更新。最终返回新的最长路径即可。我们可以使用 DFS 遍历整个二维矩阵,考虑到数据量,我们使用暴力算法可能会导致超时,为解决此问题我们可以考虑使用记忆化搜索进行加速,我们可以使用。记录从对应位置出发的最长递增路径长度。

2023-03-18 19:01:59 72

原创 LeetCode-334-递增的三元子序列

我们可以使用两个数组分别记录对于原数组中的第 i 位,其左边和右边的最小值和最大值,若存在有一位满足其左侧的最小值小于其自身且其自身小于其右侧的最大值,则直接返回 true。

2023-03-18 16:10:16 49

原创 LeetCode-1616-分割两个字符串得到回文串

我们可以使用双指针分别指向当前两个字符串的开头和结尾,若两者相等则进行循环并移动指针直至两个指针指向的字符不同。此时若左指针大于等于右指针,说明此时已经对字符串遍历完成,我们直接返回 true。**值得注意的是,此时可能存在一种情况,即左指针遍历的前半个区间与右指针遍历的后半个区间回文,但是中间未遍历的区间自己回文。**为此,考虑到我们不能确定我们最终需要使用字符串 a 还是 b 的中间区间,我们需要对两个区间都进行回文检查并返回响应结果。

2023-03-18 15:33:17 57

原创 美团笔试-3.18

考虑到数据量不大,可以直接构建二维矩阵用于记录每个坐标上是否有敌人,最终只需要遍历二维矩阵寻找在一个矩形区域中能够获得敌人的最大数量即可。值得注意的是,可能会出现多个敌人有着相同坐标的情况,因此不能单纯将矩阵的值设置为 1。同时为了方便求解区间和,可以使用前缀和进行进一步优化。i

2023-03-18 14:57:38 4392 4

原创 LeetCode-326-3 的幂

我们可以判断当前整数是否被三整除,若是则继续将当前整数除三。最终根据最终结果是否等于一判断是否整除。

2023-03-17 15:42:39 59

原创 LeetCode-324-摆动排序 II

考虑到在新的数组中,我们奇数位上的数字都要比相邻的偶数位上的数字大。因此我们可以先对数组进行排序,将前半部分较小的数字安排到偶数位上,将后半段较大的数字安排到奇数位上。值得注意的是,在此处我们可能会出现存在相邻数字相同的情况,因此我们还需要对数字的位置进行调整。考虑到若出现相同数字相邻的情况,一定是前半个区间的末尾和后半个区间的开头数字相同。为了避免出现这样的情况,我们可以先对前半个区间和后半个区间进行逆序操作,而后再组合成新数组。

2023-03-17 13:25:34 79

原创 LeetCode-315-计算右侧小于当前元素的个数

具体实现可参考。考虑到数组的长度范围过大,我们调用函数,首先对数组进行去重操作并保存在a中,并构建函数getId用于获得元素值与对应序号之间的映射关系。而后我们初始化数组c,用于储存数组a的前缀和。我们只需要从后向前遍历数组nums,就可以利用getId找到其在数组c中的对应序号。而后我们只需要计算此时c中对应位置左侧的前缀和即可获得当前数组中既在nums[i]右侧又小于nums[i]的元素。值得注意的是,此处为了加快运算,我们使用二进制中末尾为 1 的位置进行加速查找。而后我们根据当前的序号对应更新c。

2023-03-17 11:23:38 494

原创 LeetCode-2389-和有限的最长子序列

考虑到在本题中我们只需要或缺当前数组的子序列,并没有要求子序列必须是连续的。因此我们可以先对当前数组进行原地排序,而后我们从前向后利用二重循环添加需要的元素并判断当前元素的总和是否小于我们需要的queries[i]即可。

2023-03-17 09:40:02 45

原创 LeetCode-242-有效的字母异位词

我们可以对字符串进行排序,比较两个字符串在排序之后是否相等。

2023-03-16 20:24:38 25

原创 LeetCode-227-基本计算器 II

2、若为加号,则将当前数字加入栈中,最后计算总和;3、若为减号,则将当前数字的相反数加入栈中,最后计算总和;4、若为乘号或除号,则直接用当前栈中的栈顶元素与我们临时保存的。我们可以使用栈来实现数字的加减乘除。对于字符串中的每一个元素:1、若其为数字,则将其转化为。保存的是符号后面的元素。为此我们默认一开始的符号是。最终我们只需要对栈中的元素进行累加即可。进行乘除运算后加入栈中。值得注意的是,这里的。

2023-03-16 20:12:51 76

原创 LeetCode-2488-统计中位数为 K 的子数组

考虑到我们需要寻找非空子数组,且给定的正整数 k 应当为非空子数组的中位数,因此我们可以考虑使用 -1、0、1 来指代小于、等于、大于 k 的数。我们的目标是,当存在子数组的左侧在 k 的左边,右侧在 k 的右边,而且子数组中大于 k 的数与小于 k 的数之差为 0 或 1,此时等价于 k 为当前子数组的中位数。我们首先找到对应当前正整数 k 的坐标。,而后我们从头开始遍历数组,利用。

2023-03-16 19:04:17 76

原创 LeetCode-217-存在重复元素

我们可以对数组进行排序,若数组中出现相邻且相等的元素则返回 true。

2023-03-15 21:15:05 50

原创 LeetCode-218-天际线问题

为了判断一个节点是否是关键点,我们可以注意判断建筑的每一条边,并寻找是否有建筑在这条边的正上方。若没有,则当前的节点就是关键点;否则对应建筑才是关键点。,而后对数组进行升序排序。基于以上背景,我们可以将所有建筑的边都加入数组。

2023-03-15 21:06:40 58

原创 LeetCode-1615-最大网络秩

我们可以使用二维矩阵来记录节点之间的邻接矩阵,同时使用一个数组来记录每个节点的度。

2023-03-15 18:31:28 36

原创 LeetCode-350-两个数组的交集 II

我们可以使用哈希表来记录较短的数组中每个数字出现的次数。而后我们遍历更长的字符串,每当我们当前遍历的字符能够在哈希表中找到,我们将当前的字符压入最终的结果,并将对应的次数减一,当对应的次数为 0 时,从哈希表中删除对应的项。最终我们返回最终结果即可。

2023-03-14 15:55:43 42

原创 LeetCode-212-单词搜索 II

我们可以使用 DFS 来遍历整个二维网格构成的图,能否按照字符串的顺序遍历每一个节点。其中,为了避免在查询有着相同前缀的单词时花费过多时间,我们可以使用字典树进行优化。我们首先构造字典树结构,参考。我们可以使用一个字典树中的一个节点来表示字符串中的一个字符,利用哈希表来储存下一个字符与对应字典树节点之间的映射关系。当一个字符串遍历完成时,我们将该节点的word修改为对应字符串的值。因此我们可以根据一个节点的word长度来判断当前单词是否遍历完成。

2023-03-14 15:27:05 36

原创 LeetCode-1605-给定行和列的和求可行矩阵

我们可以在求解矩阵时使用贪心法,对于每个位置都取当前位置可能的最大值。我们在遍历二维矩阵的每一个位置时,将对应的行之和与列之和取最小值,而后将对应的行之和和列之和减去当前位置的值,如此不断进行循环。

2023-03-14 11:16:38 50

原创 LeetCode-387-字符串中的第一个唯一字符

我们可以使用哈希表来储存每个字符与对应的位置,若一个字符重复出现,我们则将该字符的对应位置置为 -1。最终我们遍历整个哈希表,找到对应位置中不为 -1 的最小值并返回。

2023-03-13 19:00:30 48

原创 LeetCode-210-课程表 II

我们可以将课程之间的关系理解成一个图,我们需要遍历整张图,判断能否找到一个遍历了整张图的路径。值得注意的是,我们还需要判断当前图中是否有可能出现环,若出现环则肯定无法遍历。我们首先根据输入的数组构建我们的邻接矩阵edges,而后初始化访问数组visited用于在记录节点的访问状态,其中 0 表示未访问,1 表示正在访问,2 表示已经访问完成,并利用布尔变量valid表示当前图中是否出现环,数组result记录我们在遍历过程中遍历到的节点。

2023-03-13 18:50:12 178

原创 LeetCode-2383-赢得比赛需要的最少训练时长

我们可以利用贪心法计算我们当前需要的最少的用于锻炼经验和精力的时间。显然,我们想要求得最少的初始精力,我们需要将所有精力相加,而后将结果加一即为我们需要的最少精力。我们此时只需要对 0 和。求最大值即可获得我们需要花费给精力的时间。

2023-03-13 16:48:09 50

空空如也

空空如也

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

TA关注的人

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