LeetCode
刷题,刷题,再刷题...
weixin_43838002
这个作者很懒,什么都没留下…
展开
-
559. N 叉树的最大深度
目录题目描述思路分析代码实现复杂度题目描述给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。示例 1:输入:root = [1,null,3,2,4,null,5,6]输出:3示例 2:输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null原创 2021-03-31 18:08:48 · 62 阅读 · 0 评论 -
剑指 Offer 55 - I. 二叉树的深度
题目描述输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。提示:节点总数 <= 10000思路分析方法一:后序遍历、深度优先搜索(递归、栈)树的后序遍历 / 深度优先搜索往往利用 递归 或 栈 实现。 关键点: 此树的深度...原创 2021-03-31 16:35:48 · 62 阅读 · 0 评论 -
面试题 04.02. 最小高度树
题目描述给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 思路分析方法一:深度优先搜索+递归二叉搜索树的中序遍历是一个递增的有序序列。如果要保证一个递增的有序序列对应二叉搜索树的深度最小,那么需要将中间结点作原创 2021-03-31 09:20:59 · 42 阅读 · 0 评论 -
104. 二叉树的最大深度
目录题目描述思路分析代码实现复杂度题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。思路分析方法一:深度优先搜索DFS如果我们知道了左子树和右子树的最大深度是和,那么该二叉树的最大深度即为方法二...原创 2021-03-30 17:58:33 · 34 阅读 · 0 评论 -
143. 重排链表
题目描述给定一个单链表L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.思路分析方法一:线性表 方法二:寻..原创 2021-03-29 23:53:05 · 47 阅读 · 0 评论 -
234. 回文链表
题目描述请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?思路分析方法一:将值复制到数组中后用双指针法 方法二:递归 方法三:快慢指针代码实现/** * Definition for singly-linked list. * struct ListNode { * int va.原创 2021-03-29 23:47:32 · 42 阅读 · 0 评论 -
面试题 02.07. 链表相交
目录题目描述思路分析代码实现复杂度题目描述给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node原创 2021-03-29 23:33:26 · 39 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
题目描述输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000思路分析方法一:栈栈的特点是后进先出,即最后压入栈的元素最先弹出。考虑到栈的这一特点,使用栈将链表元素顺序倒置。从链表的头节点开始,依次将每个节点压入栈内,然后依次弹出栈内的元素并存储到数组中。代码实现/** * Definition for singly-linked.原创 2021-03-29 23:20:22 · 34 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
题目描述定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000思路分析方法一:迭代在遍历链表时,将当前节点的 next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新原创 2021-03-29 23:08:27 · 47 阅读 · 0 评论 -
203. 移除链表元素
目录题目描述思路分析代码实现复杂度题目描述给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]示例 3:输入:head = [7,7,7,7], val = 7输出:[]提示:列表中的..原创 2021-03-29 22:50:07 · 48 阅读 · 0 评论 -
1290. 二进制链表转整数
目录题目描述思路分析代码实现复杂度题目描述给你一个单链表的引用结点head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。请你返回该链表所表示数字的 十进制值 。示例 1:输入:head = [1,0,1]输出:5解释:二进制数 (101) 转化为十进制数 (5)示例 2:输入:head = [0]输出:0示例 3:输入:head = [1]输出:1示例 4:输入:head = [1,0,0,1,0,0,1,1.原创 2021-03-29 22:27:06 · 43 阅读 · 0 评论 -
876. 链表的中间结点
目录题目描述思路分析代码实现复杂度题目描述给定一个头结点为 head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.n..原创 2021-03-29 22:00:26 · 37 阅读 · 0 评论 -
删除中间节点
目录题目描述思路分析代码实现题目描述实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。示例:输入:单向链表a->b->c->d->e->f中的节点c结果:不返回任何数据,但该链表变为a->b->d->e->f思路分析删除当前节点,必须知道pre节点,这里只能访问当前节点,就只能先将next节点变成当前结点,再把next节点删除。代码实现/** * Def.原创 2021-03-29 21:33:35 · 53 阅读 · 0 评论