![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分治
Huglight
这个作者很懒,什么都没留下…
展开
-
NowCoder 二叉搜索树的后序遍历序列 递归
题意:给一串序列,判断该序列是否某二叉树的后序遍历序列思路:后序遍历最后一个节点为根节点,前面的都可以分成连续的两部分,一部分比根节点小,另一部分比根节点大,依次分块递归判断两部分是否连续即可public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { if (sequence ...原创 2020-01-30 15:48:59 · 119 阅读 · 0 评论 -
LeetCode 95. 不同的二叉搜索树 II 递归
题意:给一个整数n,求出1到n能够构成的所有二叉树思路:可以用递归首先求出左子树构成的列表和右子树构成的列表,从1到n枚举所有根节点,将每个左子树和每个右子树的根连到当前的根上,最底层可能是null,也可能只有一个节点,最顶层则是所要求的答案class Solution { public List<TreeNode> generateTrees(int n) { ...原创 2019-12-12 20:28:43 · 73 阅读 · 0 评论 -
LeetCode 973 TopK问题 分治算法
因为是按tag来解所以首先用的是分治法,因为可以不用按顺序输出所以根据快速排序算法将数组分成两部分,如果划分元素位置恰好等于K则返回,小于K就说明前面的都好了,从划分位置开始划分后面的数组,大于K就继续划分前面的数组不懂leetcode怎么回事,第一次提交132ms,比直接排序还慢,第二次就变成13ms了public int[][] kClosest(int[][] points, int K...原创 2019-05-29 12:31:19 · 922 阅读 · 0 评论 -
LeetCode 241 分治算法 备忘录
用一个map储存已经计算过的结果,在运算符处划分成两部分,再用递归分别计算两部分的结果if (res.size() == 0) res.add(Integer.valueOf(input));这段代码将纯数字加入list中,才能在循环中将其加入计算private Map<String, List<Integer>> map = new HashMap<>(...原创 2019-05-30 00:38:14 · 233 阅读 · 0 评论 -
洛谷P1010 幂次方 分治
题意:给一个数,求其幂次方表示,比如:可以表示为输出答案必须只包含2和0,故137应该输出:思路:分治,字符串操作还是Java方便import java.util.Scanner;public class Main { public String solve(int n) { String res = ""; int x = 1; if (n == 0) r...原创 2019-07-13 23:39:30 · 129 阅读 · 0 评论 -
Java一亿以内汉字转阿拉伯数字&阿拉伯数字转汉字
面试题里经常看到有这道题,看别人说好像很简单,从来没去想过,今天突发奇想写一写,用的递归分治,在汉字进位那里划分成两部分,都是要从最高位开始递归public int solve(String s) { int i = s.indexOf("万"); if (i != -1) { int l = solve(s.substring(0, i)); int r = solve(s...原创 2019-07-04 20:43:49 · 1089 阅读 · 2 评论 -
洛谷 P1880 石子合并 区间DP
题意:有n堆石子,相邻石子堆可以合并为一堆,合并分数等于合并之后石子堆大小,求所有石子合并为一堆后最大得分和最小得分思路:取dp[i][j]为区间[i, j]内合并石子最小分数,则dp[i][j] = min(dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]),i≤k<j,类似分治递增区间间隔,表示每次只取相邻的两堆合并,注意序列为环,需要考虑环的问题#includ...原创 2019-08-11 17:17:51 · 135 阅读 · 0 评论