![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
Cierlly
继续搞啊!
展开
-
(分治算法8)leecode 148 排序链表
给你链表的头结点head,请将其按照升序排列并返回排序后的链表。原创 2024-06-18 16:55:29 · 199 阅读 · 0 评论 -
(分治算法7)leecode 109将有序链表转换成二叉搜索树
由876.链表的中间节点这道题,可以找到链表的中间节点mid,然后我们根据这个mid来创建TreeNode节点,这时候同样需要分出左右区间,也就是将mid的前一个节点pre,pre->next = null;这样就可以把链表断开了,接下来只需要递归的执行上述过程就可以了。给定一个单链表的头结点head,其中的元素按升序排序,将其转换为平衡二叉搜索树。方法1:可以将问题转换成数组,然后在进行求解。原创 2024-06-18 16:22:10 · 173 阅读 · 0 评论 -
(分治算法5)leecode 106 从中序和后续遍历序列构成二叉树
从中序遍历中可以找到root的坐标(无重复元素),那么中序遍历中该坐标的左边就是root中左子树的中序遍历序列,右边就是root右子树的中序遍历序列。1)使用递归,因为树或者子树的后序遍历和中序遍历序列在数组中都是连续的,所以我们可以使用边界来标记序列的长度。而在后序遍历中,可以依据中序遍历中得到的左子树序列长度切分出root左子树和右子树的后序遍历序列;这样我们就分别得到了root的左子树的后序序列,中序序列,以及root右子树的后序序列以及中序序列。空间复杂度:O(n+log(n))原创 2024-06-17 16:42:20 · 394 阅读 · 0 评论 -
(分治算法4) leecode 105 从前序与中序遍历构建二叉树
给定两个整数数组preorder和inorder,其中preorder是二叉树的先序遍历,inorder是同一棵树的中序遍历,请构造二叉树并且返回其根节点。然后从子树中,前序遍历的第一个元素就是左子树的根节点,这样的话我们就可以利用分治算法来构建二叉树。前序遍历的第一个就是根节点,根据根节点的位置,我们可以在中序遍历中知道这棵树的左子树和右子树。原创 2024-06-17 16:20:46 · 243 阅读 · 0 评论 -
(分治算法3)leecode 53 最大子数组和(最大子段和)
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。对于跨越两个数组的情况,我们可以从中间一定要包含左边界的数字或者右边界的数字,只需要一次遍历就可以了。这个问题可以分成从左半边数组找最大子段和从右半部分找最大子段和。子数组是数组中的一个连续部分。原创 2024-06-17 16:08:44 · 208 阅读 · 0 评论 -
(分治算法2)leecode 23 合并k个升序链表
因为是要合并K个有序列表,可以采用归并排序,先把第一个和第二个合并成功,合并完成的再和第三个合并。合并完成的再和第四个合并,合并完成的再和第五个合并。如果我们每次合并的数组尽可能的短,则我们的方法可以在更快地速度合并完所有数组,因此我们将所有的链表均分,然后将均分后的链表继续均分。请你将所有链表合并到一个升序链表中,返回合并后的链表。给你一个链表数组,每个链表都已经按升序排列。时间复杂度是O(nlogk)的。然后逐一合并两个链表。原创 2024-06-17 15:50:25 · 262 阅读 · 0 评论 -
(分治算法1)leecode第四题--寻找两个正序数组的中位数
然后比较一下上面的第3个数字和下面的第3个数字到底哪个更小。更小的那个,包括他前面的一定不可能是中位数,就不需要了。简单粗暴,先将两个数组合并,两个有序数组的合并排序也是归并排序的一部分,然后根据是奇数个还是偶数个,返回中位数。我们需要找的就是这两个数组中第7小的数字。其实,我们不需要真的将两个数组合并,我们只需要找到中位数在什么地方就可以了。空间复杂度:开辟了一个数组,保存合并后的两个数组 O(m+n)那么就可以找上面的和下面的第7/2=3(向下取整)的数字。我们只需要合并到中位数的位置就可以停止了。原创 2024-06-17 15:06:32 · 138 阅读 · 0 评论