leetcode题解
本屌的刷题成长记录,有网上学的,也有自己的一些见解,共勉
子墨墨
这个作者很懒,什么都没留下…
展开
-
239. 滑动窗口最大值
public static int[] maxSlidingWindow(int[] nums, int k) { if (nums == null || k <= 0 || k > nums.length) { return new int[0]; } int length = nums.length; int[] res = new int[length - k + 1]; Dequ.原创 2020-08-24 23:40:46 · 122 阅读 · 0 评论 -
剑指 Offer 38. 字符串的排列
public static String[] permutation(String s) { if (s == null) { return new String[0]; } char[] chars = s.toCharArray(); Set<String> res = new HashSet<>(); baolidigui(chars, 0, res); S.原创 2020-08-06 23:12:20 · 169 阅读 · 0 评论 -
字符串所有子序列
/** * 递归过程是一颗决策树,对每个字符要或者不要 * * @param s * @return */ public static List<String> recursionStr(String s) { if (s == null) { return Collections.emptyList(); } char[] chars = s.toCharArra.原创 2020-08-06 22:07:52 · 837 阅读 · 0 评论 -
练习:字符串所有子串的收集
private static List<String> zichuan(String s) { if (s == null) { return Collections.emptyList(); } List<String> res = new ArrayList<>(); char[] chars = s.toCharArray(); int length = cha.原创 2020-08-05 11:39:06 · 146 阅读 · 0 评论 -
拓扑排序算法
/** * 拓扑排序算法,拓扑都是有向无环图 * 使用场景:编译的时候,比如,springboot启动的时候要读取docker系统环境变量,还要读取各配置文件按照顺序 * 还有比如,a的包依赖b包,a,b包各有自己的配置文件,按照依赖顺序依次读取,所以不要循环依赖 * 拓扑排序就是从最底层开始编译,往上编译,才能编译成功 * 算法过程:依次找入度为0的点,依次删掉 */ public static List<Node> sor.原创 2020-08-02 00:56:07 · 386 阅读 · 0 评论 -
图的遍历算法
/** * 从某个节点开始宽度优先遍历,也叫广度优先遍历 * * @param node */ public static void bfs(Node node) { if (node == null) { return; } Deque<Node> queue = new LinkedList<>(); Set<Node> set =.原创 2020-08-02 00:30:47 · 160 阅读 · 0 评论 -
图的通用数据结构
public class Graph { /** * 图的标号对应的节点对象 */ public Map<Integer, Node> nodes; /** * 边的集合 */ public Set<Edge> edges; public Graph() { this.nodes = new HashMap<>(); this.edges = new Ha.原创 2020-08-01 23:43:47 · 113 阅读 · 0 评论 -
并查集
public class UnionSet<V> { public static class Node<V>{ V value; public Node(V value) { this.value = value; } } public Map<V, Node<V>> nodes; public Map<Node<V>, Node.原创 2020-07-30 00:57:08 · 96 阅读 · 0 评论 -
114. 二叉树展开为链表
114. 二叉树展开为链表难度中等429收藏分享切换为英文关注反馈给定一个二叉树,原地将它展开为一个单链表。例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 6public void flatten(TreeNode root) { if (root.原创 2020-07-29 11:19:14 · 95 阅读 · 0 评论 -
104. 二叉树的最大深度
104. 二叉树的最大深度难度简单616收藏分享切换为英文关注反馈给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。/** * 104. 二叉树的最大深度 * https://leetcode-cn.co...原创 2020-07-28 00:15:14 · 86 阅读 · 0 评论 -
110. 平衡二叉树
110. 平衡二叉树难度简单380收藏分享切换为英文关注反馈给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树[3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回true。示例 2:给定二叉树[1,2,2,3,3,null,null,4,4] 1 ...原创 2020-07-25 00:16:30 · 89 阅读 · 0 评论 -
面试题 04.06. 后继者
面试题 04.06. 后继者难度中等23收藏分享切换为英文关注反馈设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。如果指定节点没有对应的“下一个”节点,则返回null。示例 1:输入: root = [2,1,3], p = 1 2 / \1 3输出: 2示例 2:输入: root = [5,3,6,2,4,null,null,1], p = 6 5 / \ 3 6 / \ 2 4原创 2020-07-24 00:18:44 · 131 阅读 · 0 评论 -
590. N叉树的后序遍历
给定一个 N 叉树,返回其节点值的后序遍历。例如,给定一个3叉树:返回其后序遍历:[5,6,3,2,4,1]./** * 590. N叉树的后序遍历 * https://leetcode-cn.com/problems/n-ary-tree-postorder-traversal/ * * @param root * @return */ public List<Integer> pos...原创 2020-07-24 00:07:44 · 143 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树
剑指 Offer 32 - I. 从上到下打印二叉树难度中等28收藏分享切换为英文关注反馈从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7]/** * https://leetcode-cn.com/problems/cong-shang-dao-xia-...原创 2020-07-23 00:43:18 · 88 阅读 · 0 评论 -
429. N叉树的层序遍历
429. N叉树的层序遍历难度中等98收藏分享切换为英文关注反馈给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。例如,给定一个3叉树:返回其层序遍历:[ [1], [3,2,4], [5,6]]说明:树的深度不会超过1000。 树的节点总数不会超过5000。递归解法:/** * 429. N叉树的层序遍历 * https://leetcode-cn.com...原创 2020-07-22 08:43:59 · 180 阅读 · 0 评论 -
102. 二叉树的层序遍历
102. 二叉树的层序遍历难度中等567收藏分享切换为英文关注反馈给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]递归方法:/** * 102. 二叉树的层序遍历 * http...原创 2020-07-22 08:31:16 · 121 阅读 · 0 评论 -
145. 二叉树的后序遍历
public List<Integer> postorderTraversal1(TreeNode root) { if (root == null) { return Collections.emptyList(); } List<Integer> res = new ArrayList<>(); add(root, res); return res; }.原创 2020-07-21 00:33:48 · 92 阅读 · 0 评论 -
142. 环形链表 II
142. 环形链表 II难度中等546收藏分享切换为英文关注反馈给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果pos是-1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连...原创 2020-07-20 21:47:54 · 117 阅读 · 0 评论 -
141. 环形链表
141. 环形链表难度简单679收藏分享切换为英文关注反馈给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果pos是-1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其...原创 2020-07-20 21:42:48 · 115 阅读 · 0 评论 -
160. 相交链表
/** * 160. 相交链表 * https://leetcode-cn.com/problems/intersection-of-two-linked-lists/ * * @param headA * @param headB * @return */ public ListNode getIntersectionNode(ListNode headA, ListNode headB) { ...原创 2020-07-20 00:42:02 · 90 阅读 · 0 评论 -
138. 复制带随机指针的链表
后面的刷题中记得复用指针,节省空间/** * https://leetcode-cn.com/problems/copy-list-with-random-pointer/ * 138. 复制带随机指针的链表 * * @param head * @return */ public static Node copyRandomList(Node head) { Map<Node, Node>...原创 2020-07-19 00:34:55 · 77 阅读 · 0 评论 -
138. 复制带随机指针的链表
/** * https://leetcode-cn.com/problems/copy-list-with-random-pointer/ * 138. 复制带随机指针的链表 * * @param head * @return */ public static Node copyRandomList(Node head) { Map<Node, Node> map = new HashMap&...原创 2020-07-19 00:32:20 · 92 阅读 · 0 评论 -
86. 分隔链表
/** * https://leetcode-cn.com/problems/partition-list/ * 86. 分隔链表 * 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。 * <p> * 你应当保留两个分区中每个节点的初始相对位置。 * <p> * 示例: * <p> * 输入: head = 1->4-&g.原创 2020-07-19 00:03:45 · 109 阅读 · 0 评论 -
92. 反转链表 II
92. 反转链表 II难度中等425收藏分享切换为英文关注反馈反转从位置m到n的链表。请使用一趟扫描完成反转。说明:1 ≤m≤n≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULLpublic static ListNode reverseBetween(ListNode head, int m, int n...原创 2020-07-17 23:45:56 · 112 阅读 · 0 评论 -
206. 反转链表
206. 反转链表难度简单1096收藏分享切换为英文关注反馈反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?public ListNode reverseList(ListNode head) { ListNode pre = null; ListNod.原创 2020-07-17 22:31:19 · 80 阅读 · 0 评论 -
234. 回文链表
234. 回文链表难度简单563收藏分享切换为英文关注反馈请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?解法一:空间O(N),时间O(N)/** * 判断栈是否是回文结构 * * @param head * @return */..原创 2020-07-17 00:32:43 · 126 阅读 · 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.next.val = 5, 以及 ans.next.next.ne...原创 2020-07-16 23:46:01 · 591 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表
剑指 Offer 25. 合并两个排序的链表难度简单36收藏分享切换为英文关注反馈输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4限制:0 <= 链表长度 <= 1000class Solution { public ListNode mergeTwoLists(ListNode l1,.原创 2020-07-16 22:46:55 · 108 阅读 · 0 评论 -
剑指 Offer 22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点难度简单56收藏分享切换为英文关注反馈输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.public ListNode...原创 2020-07-15 22:55:52 · 91 阅读 · 0 评论 -
剑指 Offer 18. 删除链表的节点
https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof/剑指 Offer 18. 删除链表的节点难度简单29收藏分享切换为英文关注反馈给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么...原创 2020-07-15 22:46:02 · 139 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
剑指 Offer 06. 从尾到头打印链表难度简单38收藏分享切换为英文关注反馈输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000解答:public static int[] reversePrint(ListNode head) { if (head == null) { re...原创 2020-07-13 23:17:52 · 109 阅读 · 0 评论 -
74. 搜索二维矩阵 LeetCode 力扣
74. 搜索二维矩阵二维二分搜索法(代码实现的过于复杂了,改日优化一下)此题对于二分法模板的提炼是不错的public boolean searchMatrix(int[][] matrix, int target) { if (matrix.length == 0 || matrix[0].length == 0) { return false; } if (matrix.length == 1) {原创 2020-05-23 23:51:15 · 153 阅读 · 0 评论 -
144. 二叉树的前序遍历 LeetCode 力扣
给定一颗二叉树,返回他的前序遍历解决思路:遇到二叉树问题,如果深度不深,则可以直接用二叉树的递归遍历。如果深度预计很深的话,可以用非递归遍历public List<Integer> preorderTraversal(TreeNode root) { if (root == null) { return Collections.emptyList(); } List<Integer> re.原创 2020-05-22 23:43:49 · 129 阅读 · 1 评论 -
61. 旋转链表 力扣 LeetCode
题目61. 旋转链表难度中等250收藏分享切换为英文关注反馈给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。示例1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3-&...原创 2020-05-11 21:54:22 · 127 阅读 · 0 评论