Construct Binary Tree from Inorder and Postorder Traversal

106 同 105一样 同样规则构建树,只不过计算左右集合时需要注意下! 55%
dp思路:和上一题一样 84, 转换下就好
上一题的84题我实际用了递归和dp和这题不一样,这里的思路是:每个柱子的面积都是长度*高度,这个长度就是柱子右边的第一个小于柱子高度的柱子  -  柱子左边的第一个小于柱子高度的柱子 - 1,因此主要点在算长度。
这题的dp思想体现在算宽度,每层宽度可以通过上层算出。

| 1 | 
 | 
| 1 | package com.leetcode; | 
不难
| 1 | 
 | 
快排 看到leetcode有类似快排的算法,0换到左边,2换到右边 懒得实现了
| 1 | private void doSort(int[] nums, int start, int end) { | 
这个问题要好好看看的 新的套路或者说新的思想,两种回溯,一种是深度优先搜索


| 1 | package com.leetcode; | 
思路:首先定位首字母,然后查找周围匹配的下一个字母,注意的是这里需要回溯,一条路走不通,可能另一条就可以。且每个字母不能被重复用,所以加一个数组用来标记

| 1 | package com.leetcode; | 
| 1 | package com.leetcode; | 
| 1 | package com.leetcode; | 
hard 用了dp的思想,用数组存储了面积最大值,这个算法24ms,67%,有待优化


| 1 | package com.leetcode; | 
easy

| 1 | package com.leetcode; | 
难点在空间复杂度 O(1)
| 1 | package com.leetcode; | 
需要注意的是 二分法找行的时候,如果行首数小于target,还要判断行尾数是否也小于target,都小于才能startRow = middleRow + 1
| 1 | 
 | 
medium 动态规划题
一次ac

机器人只能向右和向下走,问走到终点几种方案,比较简单的经典动规
思路:在finish上方和左边到finish点个只有一种,记录下来,finish点左上方到达下面一个点是1种,到达右边也是一种,所以左上角到终点是1*1 + 1*1 = 2 种。所以对于每个点只要算上右边和下边的和就够了。

| 1 | package com.leetcode; | 
在上题基础上加了障碍物

思路:还是和上题一样,只不过每个节点算下和右和的时候如果有障碍物不算进去
| 1 | leetcode 的eg真是佛了,还有输入{{0}}和{{1}},{{0,0},{0,1}}即起点在终点,终点被堵住这种情况。 | 

| 1 | package com.leetcode; | 

思路和上面两题一样 动规
| 1 | private static class Solution { | 
三种解题方法和思路,最好的80%
| 1 | package com.leetcode; | 
动规和贪心的解决方案
贪心算法:

| 1 | package com.leetcode; | 
medium
| 1 | package com.leetcode; |