![](https://img-blog.csdnimg.cn/748d2317ac1e4921b16fd7f02b9bd842.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
小菜鸡的JAVA学习
记录一些lecod上面的1题目
pepsi_w
这个作者很懒,什么都没留下…
展开
-
对称二叉树(Leetcode 101&&572)
使用层序遍历,遍历当前层的节点时,如该节点的左(右)孩子为空,在list中添加null,否则加入左(右)孩子的值。每遍历完一层则对当前list进行判断,这里判断我用了一个很笨的方法,前面记录下一层节点值时就设置了两个list,其中一个用来翻转,然后判断这两个list是否相等来判断数是否为对称树。去看了解析,有两种方法:递归法、使用双端队列进行迭代。原创 2023-09-05 20:29:44 · 410 阅读 · 0 评论 -
二叉树的层序遍历&&翻转二叉树
使用队列来进行遍历,当前队列保存的是当前层的所有节点,依次取出队列顶端的节点,将该节点的左右子节点加入到队列尾端。将翻转二叉树划分为翻转每个节点的子问题,对每个节点,都使用一个temp节点来辅助其左右节点进行交换。原创 2023-09-04 20:05:21 · 75 阅读 · 0 评论 -
二叉树的前中后序遍历(Leetcode 94&&144&&145)
分为三种方法1)递归遍历;原创 2023-08-08 20:59:41 · 304 阅读 · 0 评论 -
逆波兰表达式&&滑动窗口最大值(LeetCode 150&&239)
使用Character.isDigit()判断是否为数字,结果这个只能判断正数,负数就会报错!后面使用正则表达,想着匹配+-*/四个运算符,但是不会,老是报错,太多特殊字符了!中使用单调队列进行维护当前最大值。主要是实现寻找滑动窗口中的最大值,原创 2023-07-21 10:56:44 · 57 阅读 · 0 评论 -
有效的括号&&删除字符串中所有相邻重复项(LeetCode20&&1047)
跟上面那个题很相似,依旧使用栈来解决。遍历字符串,如果栈顶元素与当前需要入栈的元素相等,即存在两个相邻重复项,则将栈顶pop,即删除这个重复项。如果不相等,则将该元素压入栈。最后对栈中的元素进行逆序输出即可。使用一个栈来保存这些括号,当栈顶元素与下一个需要加入栈的元素能够组成一对括号时,则出栈,否则入栈。最后判断栈是否为空就行。原创 2023-07-18 20:39:54 · 104 阅读 · 0 评论 -
用栈实现队列&&用队列实现栈(LeetCode 232&&225)
使用两个栈,输入一个栈,输出一个栈,输出栈中存放的是输入栈中pop的每个元素。输出栈用于实现队列的pop和peek方法,输入栈用于队列的push方法。如两者中元素都为空时,则表示队列为空。每次保证新加入的数据在队列的第一个位置即可保持与栈一致的顺序(这里有点点巧妙 可用看。原创 2023-07-17 20:56:38 · 370 阅读 · 0 评论 -
左旋转字符串&&字符串中第一个匹配下标&&重复子字符串(剑指58&&LeetCode 28&&459)
最开始想通过字符出现次数来进行判断,但该逻辑会出现问题:比如 ababba 应该返回false 而该逻辑会返回true。看了题解,也有其他思路:先翻转前n个字符、再翻转后length()-n个字符,最后再将整个字符进行翻转。最开始想到的就是使用字符串的substring方法,进行重新拼接。有三种思路:1)暴力;2)利用substring暴力;原创 2023-07-17 10:09:07 · 277 阅读 · 0 评论 -
替换空格&&反转字符串中的单词(LeetCode 剑指offer05 && 151)
对字符串按空格进行分割,逆序遍历得到的字符串数组,将不为空格的(由于存在连续空格,按空格分割会保留一个空格)字符串添加到新字符串中,添加完一个字符串就加入一个空格,最后跳出循环后删掉最后一个空格即可。不过看了题解有另一种解法,由于空格转化为%20,设计到原字符存储空间的增加,因此先计算出需要增加的空间后。遍历,使用新的字符串来接原字符串,如为空格,则加入%20,否则加入原字符串。原创 2023-07-13 21:51:54 · 225 阅读 · 0 评论 -
反转字符串(LeetCode 344)
创建一个新的空字符串s_new,每次向该字符串中加入k个字符,奇数次添加这k个字符的逆序,偶数次添加原序。最后剩余字符串不满足k个时,跳出循环,判断上次添加是奇数还是偶数,如果是偶数,则表示剩余字符串少于k个,逆序加入s_new,反之正序加入。反转字符串,可以理解为将第i个字符与len-i个字符进行交换,只需进行前半部分的交换即可反转整个字符串,数组需要注意下标的问题。原创 2023-07-08 16:54:09 · 376 阅读 · 0 评论 -
三数之和&&四数之和(LeetCode 12&&18)
自己的思路:前面三个数由三数之和确定,最后再遍历一遍nums来找到第4个数,但是三数之和返回的是三个具体的数,无法对第四个数与前面三个数是否重复进行判断。看了题解,是在三数之和的外面再加了一层循环,也就是确定两个指针,遍历另两个指针。太难了 不是很明白!原创 2023-07-06 21:12:17 · 192 阅读 · 0 评论 -
两数之和&&四数相加&&赎金信(LeetCode 1 && 454&&383)
看了题解发现:四个数组,也可以看作是两个数相加,这里map的key不再存放数组元素,而是存放两个数组元素的和,value存放该和出现的次数。先遍历前两个数组(也就是找到上一题中的a),初始化map ,然后遍历后两个数组的和(b),同时查看map中是否存在0-b,如果存在则获取这个和出现的次数,最后返回该次数。2)使用哈希map,来记录遍历过的数据,key=数组元素 value=下标,遍历数组,对每个数字a,判断target-a是否在map中,如果在则返回两数的下标;如不不在,则将该元素记录到map中。原创 2023-07-03 20:54:04 · 221 阅读 · 0 评论 -
两个数组的交集(LeetCode 349)
将较长的序列放入一个set后,再加入短序列的数字,判断当前数字是否添加成功,如果添加成功则表示set中没有该数字,则不属于两个数组之间的交集,将该数字从set中移除(移除是因为保证set的纯洁性 即只含有长序列中的数字);如果添加失败,则表示该数字则是两个数组的交集,将该数字添加到交集set中。最后由于该函数返回的是int[],则需要将交集set转化为int[].原创 2023-06-29 21:53:39 · 247 阅读 · 0 评论 -
有效字母异位词(LeetCode 242)
map_s.getOrDefault(i,-1)这个语句在最后一个用例中报错,但打印出来,这两个值都是一样的。将这句语句修改为两个值相减是否为0来判断,通过。为每个字符串创建一个hashmap来记录每个字符出现的次数,然后比较这两个hashmap是否相等。看题解,发现其实不用hashmap,将每个字母在字母表中的位置作为数组的下标,来存储每个字符出现的次数即可。原创 2023-06-29 20:57:22 · 180 阅读 · 0 评论 -
链表相交&&环形链表(LeetCode 02.07 && 142)
找到两个链表相交的节点,也就是两个节点的地址相同。最开始想的是要保存每个链表所有的地址,然后来看哪个地址是一样的(太不聪明!就去看了别人的思路,原来是将尾部对齐,因为两个链表相交,后续节点都是同一个地址,因此按尾部对齐的时候,一个个往后比较,遇到地址一样的,那就是第一个相交的节点,如果遍历完也没有节点地址一样的,则表示不存咋交集。使用哈希表,来记录已经遍历过的节点,要是当前节点已经在哈希表中,则表示该点是入环的第一个节点,返回该节点,如果遍历完整个链表时,每个节点都只访问过一次,则表示该链表没有环。原创 2023-06-28 21:36:07 · 194 阅读 · 0 评论 -
删除链表的倒数第N个节点(LeetCode19)
使用两个指针,两指针之间间隔n-1个节点,这样当后面那个指针到达链表的终点时,前一个指针所指位置恰好是需要删除的节点位置。我自己写的时候,还用了一个指针来存放前面那个指针的前一个位置,用于删除节点,看了以下题解,可以将前一个指针直接指向需要删除节点的前节点,进行删除。常规方法,将删掉倒数第N个节点变为删除正数第long-n+1个节点。由于链表的长度只能对其遍历后得到,因此该方法需要遍历两遍链表。第一遍得到链表的总长度,用于计算删除的节点是正序中的第几个节点,第二遍遍历到该节点进行删除操作。原创 2023-06-26 19:51:32 · 33 阅读 · 0 评论 -
两两交换链表中的节点(LeetCode 24)
最开始自己画,越画越复杂比较复杂,写不出来!(呜呜)去看了解题思路,发现只需要三步。,按以下思路写了代码,循环停止那里的条件我还以有更好的写法,发现给出的写法是一样的,两个and条件有先后顺序的,不可交换。原创 2023-06-25 21:11:02 · 435 阅读 · 0 评论 -
反转链表(Leetcode-206)
自己在草稿本上面画了一下,即对每个节点的next指向该节点的前一个节点,依次遍历所有node。但是有两种情况要分开讨论:1)当前链表为空或者只有一个node时,返回原头节点;2) 当前链表长度为2时,只需要将第二个node的next指向第一个node;后面看见别人的代码才发现不用这么麻烦,对p指针返回就不用分情况讨论了。原创 2023-06-19 21:02:30 · 54 阅读 · 0 评论 -
移除链表元素(Leetcode-203&707)
首先就是不知道MyLinkedList有哪些属性,对于插入头节点和在固定下标插入节点,没有想到插入头节点==在下标为0的地方插入节点。因为在链表中删除头节点和其他节点的操作是不同的,因此如果直接进行遍历删除则需要区分操作。但是可以通过使用虚拟头节点,这样原始头节点也是能和其他节点进行一样的操作。原创 2023-06-13 21:35:24 · 27 阅读 · 0 评论 -
长度最小子数组(Leetcode-209&&904)
1)暴力法,这里我最开始想的都需要3个for循环(子串长度一个循环、子串起点一个循环、子串起点到终点遍历数组元素一个循环) 跟题解中说的2个for循环不一致, 因为是按数组进行存储(感叹python中的切片处理真方便),因此确定了子串的起点、和长度 需要再进行一个循环来得到这个子串中的数值。自己去写的代码,有点问题,手动推演后发现我需要一个字典(python种的一种数据结构 就是键值对)来记录每个数字之前出现多少次,这样我的左指针才能知道遇到第3种数字时 应该向右边移动多少次。2)滑动窗口,利用双指针。原创 2023-04-27 14:13:40 · 55 阅读 · 0 评论 -
有序数组平方(lecod-977 && 27)
最开始没想到双指针,因为一直以为双指针都是从两边开始向中间靠近。看了解析才知道,这里的双指针分别是快慢指针。使用双指针从数组两边开始判断。两种方式:1)暴力;原创 2023-04-24 21:16:43 · 56 阅读 · 0 评论 -
数组_二分查找(Lecod69 && 367)
使用二分查找 这里最开始我定义了一个long去接受两个比较大的数相乘结果 然后就出现了一些奇奇怪怪的数字,查找资料发现long也是有限制的,两数相乘的结果放不下。这里一定要记住,好像之前python也出现过这样的问题!依旧是使用二分查找,代码跟之前的都一样。原创 2023-04-23 20:19:33 · 34 阅读 · 0 评论 -
数组-二分查找(lecod34&&35)
跟上面那个题目差不多,只是在找到等于target的字符后,向左和向右同时遍历其他字符,找到边界。使用二分法进行查找,如该数不存在,则当前左边指针的位置就是该数顺序插入的位置。1)终于我写了一个完整带有输入输出的程序!特别鸣谢@Da大象 的帮助!记得数组的初始化 是{}括号 不是[]!原创 2023-04-20 18:13:07 · 58 阅读 · 0 评论