YunYan

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  leetcode每日一题

摘要:先来看一下递归版的后序遍历是怎么写的 void dfs(TreeNode *root){ if(root==NULL) return ; dfs(root->left);//左节点 dfs(root->right);//右节点 cout<<roo->val<<endl;//访问 } 可以看到,对于r 阅读全文
posted @ 2020-09-29 22:15 Target--fly 阅读(151) 评论(0) 推荐(0)

摘要:https://leetcode-cn.com/problems/stone-game/ 定义状态数组:dp[i][j]表示还剩下i~~~j个石子时,当前选手和另一个选手的最大差值。 如果当前选手选第i个,dp[i][j]=nums[i] - dp[i+1][ j ],为什么是这样呢?假设当前选手A 阅读全文
posted @ 2020-09-01 21:29 Target--fly 阅读(239) 评论(0) 推荐(0)

摘要:题解:定义状态dp[i][0/1],dp[i][0]表示选择节点i,dp[i][1]表示不选节点i。 通过树的后序遍历从根往上走, 状态转移方程 dp[i][0]=i->val+dp[i->left][1]+dp[i->right][1]; dp[i][1]=max(dp[i->left][0],d 阅读全文
posted @ 2020-08-30 22:53 Target--fly 阅读(259) 评论(0) 推荐(0)

摘要:题目链接:https://leetcode-cn.com/problems/longest-increasing-path-in-a-matrix/ 题解: 一开始想的是枚举起点然后跑BFS,这样时间复杂度为o(n^2m^2),不太好。感觉官方题解的方法很秒,记忆化搜索,时间复杂度为O(nm),简单 阅读全文
posted @ 2020-08-16 21:13 Target--fly 阅读(138) 评论(0) 推荐(0)

摘要:题目链接 题解: 1 直接排序。 最简单的方法,放到一维数组中,直接排序,时间复杂度为o((n^2)log(n^2)),空间复杂度为o(n^2),如果n>=1e4就会超时。 代码略: 2 堆排序。 这种方法是很一个很巧妙的方法。充分用到了矩阵的每一行和每一列都是有序的。首先将第一列放到堆中,然后取出 阅读全文
posted @ 2020-07-15 16:14 Target--fly 阅读(182) 评论(0) 推荐(0)

摘要:归并排序是众多排序方法中比较稳定的一种排序。时间复杂度是o(nlogn),是一种较优的排序方法。 归并排序是一种典型的分治法,其基本思想就是将大区间划分为小区间,先对小区间进行排序,然后在通过两个有序的小区间归并为一个有序的大区间。首先对待排序数组以二叉树的形式进行分割; 比如说对数组[5,4,3, 阅读全文
posted @ 2020-07-14 11:30 Target--fly 阅读(232) 评论(0) 推荐(0)

摘要:题目连接 这个题目对dp思想的理解和对dp问题边界问题的处理很有帮助。 题解:定义dp[i][j]表示s的前i个字符和p的前j个字符是否可以匹配。 假如说p的第j个字符和s的第i个字符一样,那么dp[i][j]=dp[i-1][j-1],不一样的话,直接就是false 如果p的第j个字符是?,那么一 阅读全文
posted @ 2020-07-13 11:36 Target--fly 阅读(127) 评论(0) 推荐(0)

摘要:题目链接 题解:定义状态dp[i][j]为从当前状态到终点的最小初识值。那么dp[i][j]可以由dp[i+1][j]和dp[i][j+1]转移过来,转移方程为min(dp[i+1][j],dp[i][j+1])-dungeon[i][j]即当前状态为其右下的最小值减去当前的矩阵的值,就是所需要的值 阅读全文
posted @ 2020-07-12 19:25 Target--fly 阅读(160) 评论(0) 推荐(0)

摘要:首先要清楚什么是二叉搜索树,数据结构课上讲过,就是父节点大于左节点小于右节点的二叉树,二叉搜索树的性质就是中序遍历后得到的数组为升序数组。 具体的构建思路采用递归分分治的方法构造,根节点一定是中间的节点,确定好根节点后,根节点左边的为左儿子节点,右边的为右儿子节点。 code: /** * Defi 阅读全文
posted @ 2020-07-03 10:52 Target--fly 阅读(133) 评论(0) 推荐(0)