02 2021 档案
摘要:一道最最基础的题目,但我想借这个题目比较一下动态规划和递归 class Solution { public int fib(int n) { int[] dp=new int[n+1];//从0到n if(n==0) {return 0;} else if(n==1) {return 1;}//数组
阅读全文
摘要:思路和之前做过的动态规划有点像,首先看我自己做出来的做法 定义dp[i]的时候想了一下,开始觉得如果定义dp[i]是前i天能做出的最佳利润,感觉dpi和dpi-1不太好找关系 于是照猫画虎,定义dpi为第i天卖出能得到的最大利润 注意这个递推关系,如果dpi-1<0,证明pricei-1是前面数组中
阅读全文
摘要:一个二维的动态规划的题目,之前见过类似的 递推方程很好写: dp(m,n)=max(dp(m-1,n),dp(m,n-1)+map(m,n),边缘的则特殊处理 至于怎么写for循环,自然想到是两层for循环写完: 于是代码如下: class Solution { public int maxValu
阅读全文
摘要:这道题只有一个难点,那就是怎么定义dp[i] 我首先想dpi代表前i项的连续最大和,但这条路走不通,递推方程写不出来 其次想的是dpi代表结果数组大小为i的情况,但也走不通。 一看答案才发现,应该定义dpi为以numsi为结尾的数组 这样确实也是穷举了所有情况,而且非常好写递推 但是确实没那么容易想
阅读全文
摘要:可以说是做的第一道比较有难度的动态规划题 思路: 感觉是dp[n]肯定是和dp[n-1]等等有什么关系 但是没想到还挺复杂的 dp[n]可以分为第一次剪出来的和剩下的 这样就是1,dp[n-1] ;2,dp[n-2],一直到n-1,dp[1] 但是问题在于这个至少剪成2段的条件 这样剩下的既有可能是
阅读全文
摘要:思路: 由于是二叉搜索树,很快想到了如果root大小位于p,q之间,则root为结果,否则pq位于同侧 然后自然想到了递归 class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNod
阅读全文
摘要:思路: 一开始想着怎么遍历来找,想了一会找不到什么思路,然后突然发现可以用递归来做 递归思路也很简单:返回True的条件=左子树为True+右子树为True+左右子树深度差不超过1 于是写出代码: class Solution { public boolean isBalanced(TreeNode
阅读全文
摘要:思路: 统计层数,一开始想能不能dfs做,但怎么想感觉都不好做(脑袋里还是遍历的想法),然后自然就想到层序遍历,然后每次经过一层加一就行 class Solution { public int maxDepth(TreeNode root) { if(root==null) {return 0;}
阅读全文

浙公网安备 33010602011771号