![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode 代码随想录(Java版)
文章平均质量分 77
文章参照代码随想录网站将题分类
Dim and Gusty
这个作者很懒,什么都没留下…
展开
-
二叉树-二叉树的遍历方式 | 144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历、层序遍历
当当前结点或栈不为空时处理元素,如果当前结点不为空,先将当前结点入栈,再将指针指向左孩子,到当前结点为空时弹出元素并将指针指向右孩子,重复当前循环。先将当前结点入栈,弹出时将结点的值加入list,再分别将左孩子和右孩子入栈(这样会先弹出右孩子),当栈不为空时继续while循环,当栈为空时说明遍历结束。在方法中,如果结点为空则已经遍历到最底层,返回。先将当前结点入栈,弹出时将结点的值加入list,再分别将右孩子和左孩子入栈(这样会先弹出左孩子),当栈不为空时继续while循环,当栈为空时说明遍历结束。原创 2023-04-25 20:43:18 · 54 阅读 · 0 评论 -
二叉树-二叉树的属性 | 101. 对称二叉树
1.层序遍历:本题仍然可以使用层序遍历,在添加节点时,若左孩子不为空则加入队列并添加数值到resList中,为空也要添加null到resList中,最后从两端对比resList的值是否相等,不相等就返回false,全部相等则为对称。2.递归:使用递归判断左右孩子是否相等时,只有左右孩子均为空时直接返回true,或均不为空且值相等时才相等,其它情况列出并返回false。均不为空且值相等时继续分别比较外侧和里侧,当外侧和里侧都相等时才对称。, 检查它是否轴对称。给你一个二叉树的根节点。原创 2023-05-09 12:02:35 · 39 阅读 · 0 评论 -
二叉树-二叉树的修改与构造 | 226.翻转二叉树
思路: 当root为null时直接返回null。写一个交换左右孩子的swap方法,先调用该方法再分别以左右孩子作为参数递归的调用自身(前序遍历),这样当孩子为空时在调用自身时也会返回null。,翻转这棵二叉树,并返回其根节点。给你一棵二叉树的根节点。原创 2023-08-25 15:51:26 · 39 阅读 · 1 评论 -
栈与队列 | 232.用栈实现队列、225.用队列实现栈、20.有效的括号、1047.删除字符串中的所有相邻重复项、150.逆波兰表达式求值、239.滑动窗口最大值、347.前 K 个高频元素
思路:入队操作可以直接使用入栈,但是出队时由于队列与栈的出元素顺序相反,可以在每次出队时先将元素全部弹入出栈的栈,再从出栈中弹出元素。将这个把全部元素弹入出栈的操作写为一个方法,在出栈和返回栈顶元素时使用。最后,当入栈和出栈的栈全部为空时,栈为空。思路:可以在每次入队时都重新排列所有元素,将已在队列中的其余元素全部弹出重新入队,这样新进的元素就在队首,出队的顺序就是最新进的元素最先出,与出栈顺序相同。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(原创 2023-04-18 10:16:05 · 45 阅读 · 0 评论 -
字符串 | 344.反转字符串、541.反转字符串II、剑指Offer 05.替换空格、151.翻转字符串里的单词、剑指Offer58-II.左旋转字符串
最后反转各个单词,在end指针指到空格时反转空格前面的字符,然后将start指针移动到空格后,将end指针移动到start指针后,继续循环,遍历整个StringBuilder。思路:本题可以先判断字符串是否为null或者长度为0,之后扩容数组至空格已经替换后的大小,然后再用双指针法,左指针指向原始字符串最后一个位置,右指针指向扩容后的字符串数组的最后一个位置,当左指针没有指向空格时,将左指针的内容赋给右指针,当左指针指向空格时,填充"%20"。反转的方法依然是前几题使用的反转字符串方法。原创 2023-04-16 16:58:45 · 42 阅读 · 0 评论 -
哈希表 | 242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和、454.四数相加II、383.赎金信、15.三数之和、18.四数之和
在循环中先对nums[i]进行剪枝,由于数组已经是按照从小到大的顺序排列的,如果nums[i]>0则后面的元素也都>0,不可能存在等于0的三元组,直接返回此时为空的result。遍历到nums3和nums4时,当0-(nums3[i] + nums4[j])已在HashMap中存在时就取出相应的和出现过的次数,加到结果上。思路:使用数组来保存每个字符出现的次数,数组下标与字母一一对应,遍历字符串s时增加每个字符串的计数,遍历字符串t时再减去每个字符串的计数,如果存在不为0的计数则不是异位词。原创 2023-04-11 13:50:56 · 69 阅读 · 0 评论 -
链表 | 203.移除链表元素、707.设计链表、206.反转链表、24.两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II
通过计算还可以得出head到入环处的长度恰等于相遇处到入环处的长度,因此相遇后再设一个index1指针指向相遇处,index2指针指向head,当两个指针相等时指针的值即为题目要求的pos。分别使用临时节点temp1和temp2储存第一个节点和第三个节点的指针,之后再进行节点指针的调换。先计算链表A、B的长度,再将较长的链表的长度和指针赋给A,用lenA-lenB计算两表相差的长度,再让curA指针移动相应的长度对齐便可以开始比较。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。原创 2023-04-08 16:31:08 · 48 阅读 · 0 评论 -
数组 | 704.二分查找、27.移除元素、977.有序数组的平方 、209.长度最小的子数组、59.螺旋矩阵II
数组平方的最大值就在数组的两端,因此双指针分别指向数组的两端,从两端开始比较两个指针指向元素的大小,较大的一个放入新数组,同时移动指针,之后继续比较直到left>right。由于数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖,因此如果采用暴力解,每删除一个元素就要将后面的所有元素向前移动一位。并且,由于新移动过来的第一个元素放在了刚刚覆盖掉的元素的位置,还没有检查该元素是否需要删除,i的大小需要保持不变,需要添加i--来对冲循环条件中的i++。组成的新数组,要求也按。原创 2023-04-07 10:43:48 · 109 阅读 · 1 评论