最左下角开始找,一个数右边的数比当前数大,上边的数比当前数小,目标数比当前数大上移,比当前数小就右移
53 - II. 0~n-1中缺失的数字
mid>right,最小值一定在mid的右边,left=mid+1
mid<right,最小值一定是mid,或在mid的左边,right=mid
mid=left或mid=right,从right开始往左找最小值
50. 第一个只出现一次的字符
用LinkedHashMap
32.III. 从上到下打印二叉树 III
26. 树的子结构
A和B的根节点相同的话直接进入比较 isSubStructureDfs(A,B) A和B的根节点不相同看B是不是A的左子树或右子树的子结构 isSubStructure(A.left,B) || isSubStructure(A.right,B) ? 3 / 4 5 / 1 2 4 / 1 1、isSub(3,4) 3不等于4 返回false,看B是不是A的左子树的子结构 isSub(3的左子树,4) 2、isSub(4,4),dfs(4,4),4等于4,进行下一层递归 dfs(4的左子树,4的左子树),即dfs(1,1),1等于1,进行下一层递归 dfs(1的左子树,1的左子树),即dfs(null,null),B等于null返回true,进行下一层递归 dfs(1的右子树,1的右子树),即dfs(null,null),B等于null返回true,isSub(4,4)这个递归返回true结束递归
10- I. 斐波那契数列
数组的长度要n+1,因为有第0项
63. 股票的最大利润
第i天最大利润=max(前i-1天的最大利润,当天价格-前i-1天的最低价格)
前i-1天的最大利润的利润只用一个变量maxProfit维护,不用数组
当天价格-前i-1天的最低价格大于maxProfit就更新maxProfit
前i-1天的最低价格只用一个变量minPrice维护,不用数组:
当天价格小于minPrice就更新minPrice
42. 连续子数组的最大和
以每个位置为终点的和最大子数组 都是基于其前一位置的和最大子数组计算得出
转移方程: 若 dp[i-1] ≤0 ,说明 dp[i - 1]对 dp[i] 产生负贡献,即 dp[i-1] + nums[i]不如 nums[i] 本身大。
?
当 dp[i - 1] > 0 时:执行 dp[i] = dp[i-1] + nums[i] ;
当 dp[i - 1] ≤0 时:执行 dp[i] = nums[i] ;
47. 礼物的最大价值
i=0,j !=0,dp[i][j]=grid[i][j]+dp[i][j-1] i != 0,j = 0,dp[i][j]=grid[i][j]+dp[i-1][j] i != 0,j != 0,dp[i][j]=grid[i][j]+ max.(dp[i][j-1],dp[i-1][j])