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