
递归&分治
ln2037
用心雕琢我的艺术品。
展开
-
LeetCode 109. 有序链表转换二叉搜索树 【递归】
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5把有序链表转换成二叉搜索树。有两种写法。1.把链表转换成数组,根据数组转化成二叉原创 2021-06-18 21:06:09 · 160 阅读 · 0 评论 -
LeetCode24. 两两交换链表中的节点 【递归,模拟】
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]提示:链表中节点的数目在范围 [0, 100] 内0 <= Node.val <= 100进阶:你能在不修改链表节点值的情况下解决这个问题吗?(也就是说,仅修改节点本身。)三种写法。1原创 2021-06-16 18:25:21 · 114 阅读 · 0 评论 -
LeetCode 回文链表【递归,快慢指针】
编写一个函数,检查输入的链表是否是回文的。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?三种写法。1.把链表中的数据放到数组里求解。(这种写法不放代码了)2.递归求解。定一个指向链表起始节点的指针,然后递归遍历链表。在遍历到最后一个节点的时候和起始指针的值尽心比较。然后令指针指向下一位,返回函数返回上一层。但函数在进行调用的时候会开辟出栈帧原创 2021-06-16 18:12:27 · 152 阅读 · 0 评论 -
LeetCode 25. K 个一组翻转链表【递归】
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5/** * Definition for singly-linked list.原创 2021-01-20 10:44:36 · 107 阅读 · 0 评论 -
LeetCode 206. 反转链表 【递归】
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?简单递归。不过执行用时超过了100%的用户还是挺意外的。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next;原创 2021-01-19 19:24:55 · 85 阅读 · 0 评论 -
LeetCode 538. 把二叉搜索树转换为累加树 【递归】
给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。注意:本题和 1038: https://leetcode-cn.com/problems/binary-search-tree-to-greater-sum-tr原创 2021-01-19 19:11:56 · 74 阅读 · 0 评论 -
LeetCode 236 二叉树的最近公共祖先【递归】
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 和节点 1原创 2021-01-17 22:08:24 · 99 阅读 · 0 评论 -
LeetCode 124. 二叉树中的最大路径和【DFS】
给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入:[1,2,3] 1 / \ 2 3输出:6示例 2:输入:[-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7输出:42从根结点开始搜索,分别找出当前节点的左右子树最大路径和再更新就行了。/** * Defi原创 2020-12-18 19:29:54 · 146 阅读 · 1 评论 -
LeetCode 4. 寻找两个正序数组的中位数 【递归】
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) /原创 2020-12-16 23:04:38 · 91 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树 【二叉树 + 递归】
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \9 20 / \ 15 7限制:0 <= 节点个数 <= 5000/** * Definition for a binary tree node. * struct TreeNode { *原创 2020-12-13 18:00:51 · 93 阅读 · 0 评论 -
P3612 [USACO17JAN]Secret Cow Code S【分治】
题目描述The cows are experimenting with secret codes, and have devised a method for creating an infinite-length string to be used as part of one of their codes.Given a string sss, let F(s)F(s)F(s) be sss followed by sss “rotated” one character to the right (原创 2020-09-24 19:38:47 · 191 阅读 · 0 评论 -
L2-004 这是二叉搜索树吗? (25分) 【二叉树】
一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,其左子树中所有结点的键值小于该结点的键值;其右子树中所有结点的键值大于等于该结点的键值;其左右子树都是二叉搜索树。所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果。输入格式:输入的第一行给出正整数 N(≤1000)。随后一行给出 N 个整数键值,其间以空格分隔。输出格式:如果输入序列是对一棵二叉搜索树或其镜像进原创 2020-10-13 20:41:25 · 552 阅读 · 2 评论 -
P1434 [SHOI2002]滑雪 【记忆化搜索】
题目描述Michael 喜欢滑雪。这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael 想知道在一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子:1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9一个人可以从某个点滑向上下左右相邻四个点之一,当且原创 2020-10-05 21:21:07 · 114 阅读 · 0 评论 -
P1259 黑白棋子的移动 【递归】
题目描述有 2n2n2n 个棋子排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为 n=5n=5n=5 的情况:○○○○○●●●●●移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。如 n=5n=5n=5 时,成为:○●○●○●○●○●任务:编程打印出移动过程。输入格式一个整数 nnn。输出格式若干行,表示初始状态和每次移动的状态,用"o原创 2020-09-22 19:30:22 · 1656 阅读 · 0 评论 -
P1928 外星密码【递归】
题目描述有了防护伞,并不能完全避免 2012 的灾难。地球防卫小队决定去求助外星种族的帮 助。经过很长时间的努力,小队终于收到了外星生命的回信。但是外星人发过来的却是一 串密码。只有解开密码,才能知道外星人给的准确回复。解开密码的第一道工序就是解压 缩密码,外星人对于连续的若干个相同的子串“X”会压缩为“[DX]”的形式(D 是一个整 数且 1≤D≤99),比如说字符串“CBCBCBCB”就压缩为“[4CB]”或者“[2[2CB]]”,类 似于后面这种压缩之后再压缩的称为二重压缩。如果是“[2[2[2CB原创 2020-09-16 14:31:01 · 813 阅读 · 0 评论 -
P1228 地毯填补问题 【分治】
题目描述相传在一个古老的阿拉伯国家里,有一座宫殿。宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站立的地方外的所有地方盖上,美丽漂亮聪慧的公主就是他的人了。公主这一个方格不能用地毯盖住,毯子的形状有所规定,只能有四种选择(如图):并且每一方格只能用一层地毯,迷宫的大小为 2k×2k2^k\times 2^k2k×2k 的方形。当然,也不能让公主无限制的在那儿等,对吧?由于你使用的是计算机,所以实现时间为 1s1\mathrm s1原创 2020-09-13 12:06:04 · 655 阅读 · 0 评论