力扣-牛客实战
本专栏从LeetCode和牛客实践的角度出发,深入探讨算法设计与数据结构背后的原理。希望透过本系列文章,不仅分享LeetCode和牛客经典例题的解题思路,从而更好的提高自己的能力
喜羊羊zz
人间值得,未来可期
展开
-
双指针法的应用详解
目录前言1.判断链表是否有环2.查找链表中间的元素3.奇偶排序,前奇后偶4.删除排序链表的重复元素5.三数之和6.分割链表7.合并两个有序的数组8.两数之和—输入有序数组9.长度最小的子数组前言通常用在线性的数据结构中,比如链表和数组。指针其实就是数据的索引或者链表的结点。两个指针朝着左右两个方向移动,直到满足搜索条件。双指针可分为同向双指针、异向双指针、快慢指针、滑动窗口。根据需求选择双指针的模型,比如删除数组或链表中重复的元素,同向双指针(线性表前提是有序的);快慢指针一般用在链表中,比如原创 2022-03-04 18:03:03 · 1103 阅读 · 3 评论 -
深入了解Top-K问题
Top-K问题原创 2022-01-09 20:11:52 · 511 阅读 · 3 评论 -
数据结构-二叉树最大宽度(Java实现)
二叉树最大宽度题目(力扣662题)给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。解题思路代码实现...原创 2021-12-26 20:27:44 · 417 阅读 · 0 评论 -
数据结构-二叉搜索树转成递增顺序搜索树(Java)
二叉搜索树转成递增顺序搜索树题目(力扣897题)给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。方法一:中序遍历后生成新的树1,2,代码实现 public TreeNode increasingBST(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); //中序遍原创 2021-12-22 16:06:56 · 870 阅读 · 0 评论 -
数据结构-二分搜索树转双向链表(Java)
二分搜索树转双向链表题目思路代码实现原创 2021-12-17 12:41:46 · 1479 阅读 · 0 评论 -
数据结构-根据二叉树创建字符串(java)
根据二叉树创建字符串(力扣606题)题目你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。思路1,通过先序遍历,用StringBuilder拼接大字符串2,括号问题当左树右树都空,可以省略括号当左树空,右树不空,不能省略括号当左树不空,右树空,可以省略括号代码实现 StringBuilder sb = new StringBuilder();原创 2021-12-15 22:23:26 · 540 阅读 · 0 评论 -
数据结构-寻找二叉树两节点的最近公共祖先(Java)
寻找最近公共祖先思路代码实现原创 2021-12-15 21:14:35 · 1568 阅读 · 0 评论 -
Java根据前序中序遍历构建二叉树
105题-从前序中序遍历构建二叉树题目给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]示例 2:Input: preorder = [-1], inorder = [-1]Output: [-1]解题思路1,从前序找到根节点2,再从中序寻找该根节点索引,分左右两个区原创 2021-12-10 22:16:33 · 995 阅读 · 1 评论 -
数据结构-判断对称二叉树(Java)
101题-判断对称二叉树题目给定一个二叉树,检查它是否是镜像对称的。解题思路代码实现原创 2021-12-10 21:01:24 · 426 阅读 · 0 评论 -
二叉树-判断另一棵树的子树(Java)
572题-另一棵的子树题目给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。示例 1:输入:root = [3,4,5,1,2], subRoot = [4,1,2]输出:true示例 2:输入:root = [3,4,5,1,2,null,null,原创 2021-12-10 11:25:13 · 190 阅读 · 0 评论 -
数据结构-判断平衡二叉树(java)
110题-判断平衡二叉树题目:解题思路代码实现 public boolean isBalanced(TreeNode root) { if(root == null){ return true; } // 使用Map存储每个出现节点的高度 // 求当前的左右子树高度 Map<TreeNode,Integer> map = new HashMap<>();原创 2021-12-09 11:37:49 · 453 阅读 · 0 评论 -
反转链表详解版-Java
206题-反转链表给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[]方法一:头插法新建一个大小和原链表完全相同的新链表,边遍历原链表,边在新链表将新建节点头插,返回新链表头节点public ListNode reverseList(ListNode head) { //判断边界条件 i原创 2021-11-02 22:38:26 · 212 阅读 · 0 评论 -
删除链表元素详解版(Java)
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输出:[]1,一般方法:先判断头节点,若不是,向后寻找val节点,找到待删除节点前驱,再删除原创 2021-10-28 20:34:33 · 1357 阅读 · 2 评论