Day 23

第96题:

给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?(来自LeetCode)

1、题目相当于给了n个数(1……n),然后使用这n个数来组成二叉树;

  其实很容易就像得到就是用n个数里面的每个数字来作为根节点计算它组成的二叉树个数;

  (这里可以知道sum[0]=1,sum[1]=1)

  这里可以看得出思想是递归往下的,例如给一个(1、2、3、4、5);

  我们此时用3作为根节点,然后它的左子树一定是由(1、2)两个节点组成

                  右子树一定是由(4、5)两个节点组成

  我们就可以利用dp数组或者递归的方式来将两个节点组成的二叉搜索树个数存储起来;

  一直左右子树都是两个节点组成的二叉树,两个节点组成的树个数都是两个;

  那么就得出根节点为3,节点数为5组成的二叉搜索树个数是4(2*2)个;

  这样依次就可以得出每个数作为根节点组成的二叉树个数了;

  最终得出结果(遍历的时候就可以直接将结果累加起来,最终的sum[n]就是所需要的总数)

  

  下面时递归写法

  

第53题:

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。(来自LeetCode)

1、其实就和插入排序一样,将数组的第一个元素作为最终解;

  然后将后面的元素依次加入最终解,判断每一步加的时候最终解与之前的最终解比较,去大的那个就可以了。

  

2、下面是动态规划,思想都差不多。

  

原文地址:https://www.cnblogs.com/liang-yi-/p/13311226.html