- 博客(30)
- 收藏
- 关注
原创 day28 力扣1047 删除字符串中的所有相邻重复项
参考day27有效的括号,使用栈实现,当遍历到的元素与栈顶元素(栈顶指针前一位)相同时,栈顶指针前移一位(相当于弹出元素),用循环继续判断。,做法与栈相似,需要注意的是输出时字符串结束的语句有些许不同。方法:输出整个栈,把栈当成字符串,当需要添加字符串结束语句。需要解决的问题三:用while循环还是for循环。需要解决的问题2:使用栈实现如何输出正向字符串。方法:当栈顶指针不大于0时,不进行判断。用双指针法实现,在原字符串上直接修改,需要解决的问题1:首元素的处理。方法:栈实现的话都可以。
2023-05-29 17:13:28
110
原创 day27 力扣20有效的括号
2:注意char中下标不能出现负数,否则越界,编写错误,所以令栈顶指针先加一后赋值(比较元素时不需要对栈顶指针-1)(另一种想法:只令右括号相应的左括号入栈,栈元素与字符串元素进行比较)重难点2:如何实现第二种情况的判断。重难点1:如何规划代码布局。时间/空间复杂度O(n)1:不需要所有元素进栈。
2023-05-25 19:15:07
119
原创 day26 力扣225 用队列实现栈
此时可以直观感受到更新队列首尾指针的重要作用:指针的位置一直在改变,更新后却不会影响队列操作。难点:理解做法的含义,区分与用队列实现栈的不同之处。
2023-05-23 00:34:31
135
原创 day25 力扣232用栈实现队列
需要判断stackout是否为空,否时把in栈中的元素都复制到out栈中,后pop出out栈top元素并保存。此时出现了错误(即注释掉的部分,导致pop出的元素一直显示越界,原因在改良代码中说明了)有点啰嗦,改良版:(减少对内存的访问次数)
2023-05-19 21:16:24
127
原创 day24 力扣27移除元素(双指针法系列)
(好处在于没有申请多余空间,在原数组上进行修改,只用一次for循环实现两个指针的移动)时间复杂度O(n),空间复杂度O(1)
2023-05-15 17:30:29
39
原创 day23 力扣459重复的子字符串
【KMP算法之求next数组代码讲解】https://www.bilibili.com/video/BV16X4y137qw?注意一个重复周期的计算。
2023-05-14 11:23:53
27
原创 day22 力扣28找出字符串中第一个匹配项的下标
注意细节,区分减一不减一,对k的操作差异!KMP算法有点难理解,之后再看看!时间复杂度O(nlen+hlen)弊端:时间复杂度O(n^2)不匹配时,找到原来匹配的位置。好处就是容易想到,好实现。对KMP算法的详细解释。画图辅助理解整个过程。
2023-05-11 19:50:04
65
原创 day21 力扣151反转字符串中的单词
此时选择这个顺序的好处显示出来:不许考虑两边的边界,即使左边界为空格也可以进行操作,只需要关注右边界字母和空格的分界。2.进行单个单词的反转:需要使用嵌套循环,固定一边端点i,另一边j往后遍历直至为空格,传参进行单词的翻转。于是简化①:进行传参,实现字母翻转(翻转整个字符串及翻转单个单词的操作通过传参进行)昨天的原代码:写法有点混乱,变量太多,重复的步骤也多,导致错误很多也不好找。1.进行整个字符串的反转-->直接传参。时间复杂度O(n)空间复杂度O(1)3.进行多余空格的删除。
2023-05-10 22:08:17
75
原创 day20 力扣58 II. 左旋转字符串
由此,可直接写一个转换两个数的函数,重复调用三次,一次是n前的字符,第二次是n后的字符,第三次是一整个字符串。
2023-05-09 23:18:41
36
原创 day18 力扣541反转字符串||
出现问题1:进行判断时,一开始写的是【 k=i+k<slen?则此时有一个错误:变成判断剩余个数大于k个/小于等于k个,故报错。出现错误2:right的下标起点。
2023-05-07 15:46:55
68
原创 day18 力扣18 四数之和
另外,定义*returnColumnSizes大小的步骤也可以放在ans[anslen]=temp前后(空间在最开头申请)时间复杂度O(n^3)
2023-05-05 23:10:57
33
原创 day15力扣454 四数相加||
HASH_ADD_INT用法:参数1:哈希表;参数2:要添加的键值;参数3:哈希表结构的结构体指针。//声明了一个返回值为hashTable类型指针的函数find,find函数的返回值为一个地址。//HASH_FIND_INT用法:参数1:哈希表;参数2:要查找的键值的。(以下为原代码,此时我还未领悟到应该用结构体做。参数3:哈希表结构的结构体指针。//返回值:输入一个键值,哈希表则。出现了超越整形范围的问题。时间复杂度O(n^2),没有就返回NULL。
2023-05-01 01:23:56
52
原创 day9 力扣24两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。为了省去对头节点的判断,本题用虚拟头节点法,先令用于遍历的cur指向dummyhead,后按照步骤改变相邻两个节点顺序。本题要点,需要另设两个临时节点保存原来的一、三节点/对case2、3情况的判断。便于后面新节点的设置。
2023-04-23 18:10:10
30
原创 day8 力扣206反转链表
双指针法:申请一个cur指针指向头节点(用于遍历链表)、一个pre指针指向NULL(作为最后的头节点输出)、一个临时指针temp(用于保存节点指向的改变)问题:发现加上/*/head是否为空的判断时某些情况会运行出错 (虽然本来就是多余的),请你反转链表,并返回反转后的链表。题目:给你单链表的头节点。
2023-04-22 21:01:49
32
原创 day7 力扣707设计链表
稍作修改,此处进行分类讨论,若index=0,则表示进行一次头插法,比较巧妙,需要注意的是后续的判断往后挪一位,即少进行了一次遍历。申请临时节点pre用于遍历链表,找到下标为index的节点val,若遍历完未找到index则表明下标无效。// 现在,链表变为 1->3。在这一块出现的误区,要注意cur与i的起始位置,其他步骤跟add差不多,只增加了一个free()在插入完成后,新节点会成为链表的第一个节点。等于链表的长度,那么该节点会被追加到链表的末尾。的节点追加到链表中作为链表的最后一个元素。
2023-04-21 23:55:10
138
原创 day 6 力扣203移除链表元素
申请一个新的虚拟头节点完成头节点的任务、临时节点pre用于遍历、(新头节点返回),可以取消对head是否为空及head->next->val是否为val的判断,使后续对所有节点的操作都一致。需要注意对头结点的处理(当为NULL/指向第一个结点对应的val为目标val时),对尾结点的处理(next->val=NULL且对应的val为目标val时)申请一个pre结点,对链表进行遍历,找到对应的val等于目标val的结点,将其移除。以链表 1->2->6->3->4->5->6, val = 6 为例。
2023-04-20 18:23:20
27
原创 day5 力扣202快乐数
快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。:声明哈希表,用于记录sum出现的个数(本题关键在于‘无限循环’,若sum重复说明进入死循环),再通过传参改变sum的大小(当sum!如果 n 是快乐数就返回 True;不是,则返回 False。编写一个算法来判断一个数 n 是不是快乐数。
2023-04-19 13:35:38
38
原创 day4 力扣54 螺旋矩阵
链接给你一个正整数n,生成一个包含1到n2所有元素,且元素按顺时针顺序螺旋排列的n x n正方形矩阵matrix。
2023-04-18 16:26:01
57
1
原创 day3 力扣76 最小覆盖子串
总体采用滑动窗口(与之前相似),这次不同点在于输出的是子串而非长度,需要声明target变量用于记录目标元素位置,重新申请res字符串作为返回结果。最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。t 中两个字符 'a' 均应包含在 s 的子串中,因此没有符合条件的子字符串,返回空字符串。③(**待解决)出现重复元素如何解决。所有字符的子串,则返回空字符串。整个字符串 s 是最小覆盖子串。所有字符的最小子串。①字符串的长度如何表示。②最小覆盖子串如何输出。
2023-04-17 21:22:24
54
原创 打卡day2 904水果成篮(长度最小子数组相关)
明确题目要求:计算当前子数组长度外,还需要利用数组记录水果类型(用于进行条件判断),及此水果类型数量(隐藏)如果从第一棵树开始采摘,则只能采摘 [0,1] 这两棵树。如果从第一棵树开始采摘,则只能采摘 [1,2] 这两棵树。可以采摘 [1,2,1,1,2] 这五棵树。可以采摘 [2,3,2,2] 这四棵树。可以采摘 [1,2,2] 这三棵树。①不知道如何判断水果种类是否已存在。可以采摘全部 3 棵树。
2023-04-15 17:07:24
60
1
原创 209求长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。类似双指针,右端点扩展,for循环计算sum,当sum>=target时保存数组长度,用while循环压缩左端点直到数组长度最小,输出。输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。·不知如何表示在不符合条件时返回。·不知如何对比返回长度的大小。
2023-04-14 16:28:59
140
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人