- 博客(40)
- 收藏
- 关注
原创 [LeetCode]139.单词拆分(C++)
用了动态规划,用一个count1数组记录字符串的前i个字母是否能拆分成单词,状态转移方程是count1[i] = count1[j] &&hashTable.count(s.substr(j,i-j))>0。
2024-08-28 20:03:08 251
原创 [LeetCode]416.分割等和子集(C++)
如果数组长度小于2或存在一个大于总和一半的数或总和是奇数,那么就不存在等和子集。否则,构造一个矩阵记录前i个数中是否存在总和为j的子集。用了动态规划,如果result[i][j]为true,那么result[i-1][j]为true,或者result[i-1][j-nums[i]]为true。
2024-08-28 19:58:14 217
原创 [LeetCode]199.二叉树的右视图(python)
,然后用result1记录每一层的最后一个数字。首先用result记录层次遍历的结果(见。
2024-08-27 15:44:55 224
原创 [LeetCode]98.验证二叉搜索树(python)
在isValidBST内部定义了递归函数isValid,如果结点为空,则返回True,否则检查结点的值是否在规定的范围内,并递归地检查左子树和右子树。
2024-08-27 15:13:15 247
原创 [LeetCode]46.全排列(python)
定义了一个fill函数,填写从下标n开始的部分,如果n==length,则该该排列符合要求,保存到result中。否则依次交换当前位置的元素与后续元素,递归地生成排列。交换操作后的恢复避免了修改数组造成的错误。
2024-08-25 13:04:36 328
原创 [LeetCode]102.二叉树的层序遍历(python)
用一个队列控制遍历,一开始队列中只有root,每一次通过检查队列的长度,控制出队的元素个数恰好为一层的个数。每次一个元素出队,依次将它的左右子节点入队,并计入result中对应数组。
2024-08-25 12:13:00 284
原创 [LeetCode]438.找到字符串中所有字母异位词(C++)
在s中构造一个长度与p相同的滑动窗口,用两个数组分别记录p和滑动窗口中的字母种类和数量,若两个数组完全相同,则表示找到一个字母异位词,将此时滑动窗口的起始位置加入result。
2024-08-22 16:34:45 313
原创 [LeetCode]240.搜索二维矩阵II(C++)
对于每一行进行二分查找,如果找到target则返回true,如果最后仍未找到则返回false。
2024-08-22 16:29:37 120
原创 [LeetCode]48.旋转图像(python)
为了实现原地旋转,每一次覆盖某个位置的值之前要记录其原有值。要实现对整个矩阵的翻转,只要对i in range(n//2)和j in range((n+1)//2)的部分操作,使其对应的4块区域均旋转到所需的位置。
2024-08-20 15:26:12 164
原创 [LeetCode]189.轮转数组(python)
定义了一个翻转数组的函数reverse。只要把整个数组翻转一次,再把前k个元素翻转一次,把第k+1个元素到末尾部分翻转依次,即得到轮转后的数组。
2024-08-19 21:03:59 135
原创 [LeetCode]54.螺旋矩阵(C++)
定义了matrix2记矩阵中的元素是否已经被访问,定义了i,j记录当前访问位置,定义了direction记录螺旋运动的方向,每一次移动后检查下一次移动是否会越界或重复访问并据此调整方向,当数组中元素个数与矩阵中元素个数相同时访问结束。
2024-08-19 10:20:35 122
原创 [LeetCode]53.最大子数组和(C++)
用了动态规划,current_sum记录了以当前位置为末尾的最大子数组和,max_sum记录了当前的最大子数组和。
2024-08-19 09:37:21 92
原创 [LeetCode]160.相交链表(python)
开始,指针在到达链表末尾时切换到另一个链表的头节点。这样,两指针将会在相交节点处相遇,或者都到达。如果存在交点,最终这两个指针会相遇在交点;如果没有交点,则指针同时变为。通过使用两个指针遍历两个链表,分别从。
2024-08-18 15:05:30 209
原创 [LeetCode]148.排序链表(python)
将链表以中点为界分为左右两个链表,分别对左右两个链表按升序排序后再合并这两个有序链表。在找链表的中点用时了快慢指针,每一个循环快指针走两步,慢指针走一步,当快指针到达末尾或末尾前一个位置时,慢指针到达中点。
2024-08-18 14:00:34 87
原创 [LeetCode]200.岛屿数量(C++)
扫描整个网格,每次遇到为1的位置,则以它为起始结点深度优先搜索,将所有被搜索到的1改为0,并将岛屿数+1。定义深度搜索函数时,如果被搜到的位置为0或越界则直接返回,否则将对应位置标为0,并且依次以相邻的4个位置为起始结点深度搜索。
2024-08-17 07:45:00 153
原创 [LeetCode]21.合并两个有序链表(C++)
用了递归的想法,每次选取两个链表头较小的元素作为所求链表的第一个值,所求链表的剩余部分为两个链表剩余部分合并的结果。
2024-08-17 00:27:09 123
原创 [LeetCode]279.完全平方数(python)
运用动态规划,维护一个result数组,对于每一个数值,遍历它包含1到sqrt(n)平方项的情况。
2024-08-16 11:02:10 138
原创 [LeetCode]322.零钱兑换(python)
使用动态规划,维护一个result数组来记录每个金额所需的最少硬币数,对于每个金额,遍历最后一个硬币是coins中所有值的情况,如果最终硬币数仍为初始的max_amount则无法凑成返回-1,否则返回最小金额数。
2024-08-16 10:53:44 153
原创 [LeetCode]560.和为K的子数组(C++)
先用一个数组记录从0到i-1的累加和,然后遍历以第i个元素为子数组结尾第j个元素为子数组开头的情况,其中可以通过计算p[i]-p[j]判断所取的子数组是否和为k。
2024-08-15 12:39:17 120
原创 [LeetCode]238.除自身以外数组的乘积(C++)
构造left和right这两个数组分别储存索引i左边所有元素的乘积和右边所有元素的乘积,将对应的left[i]和right[i]相乘就得到除i以外的乘积。
2024-08-15 11:52:53 104
原创 [LeetCode]198.打家劫舍(python)
对长度为0,1,2的情况单独讨论,当长度>=3,分为抢劫最后一家和不抢劫最后一家两种情况,若抢劫最后一家则无法抢劫倒数第二家。
2024-08-14 14:11:04 143
原创 [LeetCode]128.最长连续序列(python)
先用一个哈希表储存nums中的所有元素,然后遍历nums中的每个元素是最长连续序列第一个元素的情况,其中如果i-1也在序列中,则i不可能是最长连续序列的第一个元素。
2024-08-14 13:59:16 128
原创 [LeetCode]55.跳跃游戏(C++)
遍历整个数组并更新最远可达位置,如果当前位置大于最远可达位置,则返回false,如果过程中最远可达位置超过了最后一个元素所在位置,则返回true。如果遍历了整个数组仍没有结果则返回false。
2024-08-09 19:20:49 265
原创 [LeetCode]234.回文链表(python)
首先依次把链表中的元素读入数组,然后每次检查数组left和right指向的元素是否相等,直至left和right相遇。
2024-08-07 17:21:11 147
原创 [LeetCode]56.合并区间(python)
构造一个List[List[int]]的result列表来记录合并区间的结果,对于intervals中的每个区间,判断它是否与result中已有的区间重叠,如果没有重叠,就直接把当前区间加入result,如果有重叠,就把所有重叠的小区间合成一个大区间,在result中删除这些小区间并加入大区间。
2024-08-07 16:16:53 130
原创 [LeetCode]142.环形链表ll(C++)
从头开始扫描链表,并用哈希表记录,每扫到一个结点判断一次它是否已经在哈希表中,第一个二次出现的结点就是所求的结点。
2024-08-06 11:34:25 118
原创 [LeetCode]49.字母异位词分组(python)
一组字母异位词按升序重新排列后的字符串是相同的,以升序排列后的字符串作为键,以储存了对应下标的列表作为值构建哈希表。然后遍历哈希表的每一个键,构建对应的empty_list。
2024-08-05 14:16:13 211
原创 [LeetCode]1.两数之和(python)
为nums数组构建哈希表,以nums中的值为键,以对应的下标为值,这样可以在O(1)的时间内完成值为target-nums[i]的元素下标的查找。
2024-08-05 14:05:48 85
原创 [LeetCode]73.矩阵置零(C++)
首先判断第0行和第0列是否有0并记录在flag1和flag2。然后扫描剩余部分,如果第i行第j列的元素为0,则把metrix[i][0]和metrix[0][j]置零。然后扫描第一行,对值为0的元素将这一列置零,扫描第一列,对值为0的元素把这一行置零。最后检查flag1和flag2并根据情况决定是否将第0行和第0列置零。
2024-08-03 21:28:05 163
原创 [LeetCode]30.串联所有单词的子串(python)
首先用哈希表统计列表中各个词的出现次数,并用空的哈希表记录滑动窗口中各个词的出现次数。运用了多起点的滑动窗口以避免漏检,共word_len个起点。对于每个起点,其右端每次向右滑动word_len,如果新增词在列表中存在,则将该词的出现次数加1,并且检查是否超出列表中的出现次数,如超出,则逐次将滑动窗口左端右移word_len至与列表中出现次数相等。更新窗口后,检查滑动窗口长度,若等于total_len,则对应的left是一个子串的起点。如果新增词不在列表中,则清空哈希表和滑动窗口。
2024-08-02 19:19:09 151
原创 [LeetCode]19.删除链表的倒数第N个结点(python)
一开始now和tail都指向head,然后把tail向后移动n次,这样当tail指向链表末尾时,head指向倒数第n个结点的前一个,可以方便地删除倒数第n个结点。
2024-08-02 16:48:30 175
原创 [LeetCode]22.括号生成(C++)
用了动态规划,把原问题等价为:左边生成a个括号,右边生成b个括号,再用一个括号把左边的序列括起来,其中a+b=n-1。
2024-08-01 20:41:46 106
原创 [LeetCode]12.整数转罗马数字(C++)
分别讨论输入为4位数, 3位数,2位数,1位数的情况,用了递归的想法,只处理输入的第一位,对后面的几位调用函数本身。对不同的输入位数分别考虑=4,=9,4。因为有可能出现末位为0的情况,所以对于输入为零单独讨论。
2024-08-01 19:36:29 195
原创 [LeetCode]11.盛水最多的容器(python)
定义了left和right分别指向数组的左端和右端,每一次移动height较小的一端,可以覆盖盛水最多的情况,每次更新left或right位置后计算盛水量。
2024-07-31 16:52:41 184
原创 [LeetCode]3.无重复字符的最长子串(C++)
维护一个始终没有重复字符的子串。定义了一个数组来记录ASCII码对应的字符在子串中出现的位置,逐次将子串的右端后移,在数组对应项记录当前位置,如果对应的字符出现位置在当前子串中,则还需把子串的左端更新为数组对应项记录的位置。每一次更新数组后长度的最大值就是所求的最长子串长度。
2024-07-30 22:21:08 275
原创 [LeetCode]2.两数相加(C++)
先对两链表都非空的部分做加法,再分别对l1较长,l2较长和l1,l2一样长的情况分别讨论。最后一位如果有进位就在l3末尾加上最高位,如果没有进位则无需额外处理。
2024-07-29 22:23:33 127
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人