2020年3月第2周做题记录(力扣)

写在前面的话:养成做题的好习惯。这周得把论文整完。
做题时间:2020年3月9日~2020年3月15日
记录:题数与时间。
最近更新时间:20200309

二叉树的完全性检验

链接:https://leetcode-cn.com/problems/check-completeness-of-a-binary-tree/
类名:
考察点:树、层次遍历、完全二叉树
解题过程:
刚开始考虑用递归计算节点对应左右子树的高度和左右节点是否存在来判断完全二叉树,然后考虑各种特殊情况,整个人都被搞糊涂了。就放弃递归,用迭代实现树的层次遍历,考虑到完全二叉树最后一个层次遍历的节点要么存在左子树,要么左右子树均为空,标记满足这类特性的节点,再继续遍历二叉树,若遍历的节点的左右子树不都为空,则该子树不为完全二叉树,否则即为完全二叉树。我真蠢,一开始就应该从完全二叉树的特点出发。

买卖股票的最佳时机

链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/
类名:
考察点: 动态规划
解题过程:力扣3月每日1题
动态规划问题。找状态,确定dp数组的意义,找状态转移方程。
n天,0<=i<n,交易次数为k,dp[i][k][0]表示i天拥有股票的最大值,最多交易次数为k;dp[i][k][1]表示i天没有股票的最大值,最多交易次数为k。
dp[i][k][0] = 最大值(dp[i-1][k][0],dp[i][k][1]+第i天的股票),第i天没有股票,情形1:今天本来就没有股票,和昨天i-1也没有股票,保持一致;情形2:今天有股票,卖了当天的股票(加表示卖股票赚)。
dp[i][k][1] = 最大值(dp[i-1][k][1],dp[i][k-1][0]-第i天的股票),第i天有股票,情形1:今天有股票,但不买入股票,和昨天一致;情形2:今天没有股票,昨天i-1也没有股票,买了当天的股票(减表示买股票花钱)。而k-1则表示交易次数需要较少1次。
交易次数k为1,所以下列可化简,
dp[i][1][0] = 最大值(dp[i-1][1][0],dp[i][1][1]+第i天的股票)
dp[i][1][1] = 最大值(dp[i-1][1][1],dp[i][0][0]-第i天的股票)//交易次数为0,dp[i][0][0]=0
变成了
dp[i][0] = 最大值(dp[i-1][0],dp[i][1]+第i天的股票)
dp[i][1] = 最大值(dp[i-1][1],-第i天的股票)//交易次数为0,dp[i][0][0]=0

猜你喜欢

转载自www.cnblogs.com/ranh941/p/12449034.html