- 博客(10)
- 收藏
- 关注
原创 最大子数组问题(动态规划)
最大子数组问题可以通过动态规划将时间复杂度做到O(N),也是之前的算法导论4.1-5问题动态规划问题上文的分治思想,实际上是根据问题性质将其分解为小规模问题,之后逐步求解小问题得出结果,再利用这些结果得出原问题的解。动态规划实际上也是这种思想,当问题具备重叠子问题,最优子结构的性质时,往往可通过此法得出答案。对于最大子数组问题,采用dp数组解决定义:dp[i]i 为数组索引,是为“状态”,dp[i]为以索引i为终点的数组的前i+1个值的最大子数组和考虑dp[i] 与 dp[i-1]的关系,是否
2021-08-28 22:56:44
3113
1
原创 最大子数组问题(递归)(java)
最大子数组问题(递归)作为分治策略的典型应用,时间复杂度可达到O(nlgn),与归并排序相同。分治策略应用三种步骤:分解:将问题分解成子问题,子问题的形式跟原问题一样,但规模更小,如果所解决的问题不能够分解,则分治也无从谈起。解决:不断递归,子问题被分解为更小规模的子问题,直到递归“触底”,这解决该问题,即停止递归,递归开始“上升”。归并:将各子问题的解合成其父问题的解以问题“最大子数组”为例:分解:将数组“均匀”分为两半,原问题即分解为:1:找出左半边数组的子数组的最大值2:找出右半边数
2021-06-27 18:02:13
584
2
原创 树的同构(Java实现)
树的同构备忘!定义:给定两棵树r1、r2,如果r1可以通过若干次的左子树和右子树互换,使之与r2完全相同,这说明两者同构。举例树的构造树可以由数组或链表来构造:举例:上图左上角的树通过数组可表示为0123456789101112ABCDEG---F-H-该方式浪费了部分空间,但适合表示完全二叉树链表方式则比较直观除上述两种方式外,还可以采用“类数组”的方式 public static class Node{
2021-06-14 19:07:53
2646
6
原创 树的建立 和 后序遍历
通过递归方式建立一棵树,之后分别给出树后序遍历的递归和非递归方式这是一棵树终端输入:AB #CD## E ##F# G H # # #//codepublic class CreateTree { public static void main(String[] args) { TreeNode t = null; TreeNode input = input(t); beforeTraversal(inp
2021-05-29 23:30:07
313
4
原创 算法4 2.1.13
public class E20113 { public static void main(String[] args) { int[] arr = new int[52]; //先形成各种花色的牌 分为四种1,2,3,4 for(int i = 0;i < 52;i ++){ arr[i] = i / 13 + 1; // System.out.println(arr[i]); }
2021-05-23 23:30:57
138
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人