5.26笔记

    xiaoxiao2024-12-04  54

    697.数组的度: 用dict记录nums中每个元素出现的位置,记录度为出现位置最多的长度,返回拥有相同度的元素中,min(首末位置最之差+1)。 714. 买卖股票的最佳时机含手续费: 初始化dp1[0] = -prices[0],dp1[i]表示第i天手上有股票,dp2[i]表示第i天手上没有股票状态转移方程如下: dp1[i] = max(dp1[i-1], dp2[i-1] - prices[i]) (第二项表示在第i天买入股票) dp2[i] = max(dp2[i-1], dp1[i-1] + prices[i] - fee) (第二项表示在第i天将股票卖出,并扣除手续费) 贪心做法(来自leetcode中文讨论区): 假设此次交易利润:B - A - fee, 下次交易利润:D - C - fee, 两次交易利润之和为 B - A + D - C - fee * 2, 而只进行一次交易的利润为:D - A - fee, 只有当两次交易利润之和大于只进行一次交易的利润,才会进行两次交易,因此:B - A + D - C - fee * 2 > D - A - fee,化简得 B - fee > C,即下次交易的买入额要小于这次交易的卖出额-fee,才会获得更高总利润。 这里设定minimum为此次交易卖出额-fee, 如果下一次股票价格比minimum小,说明值得买入(重新赋值minimum); 如果大于minimum + fee,则按照minimum来计算交易利润,计算结果等价于上一次交易不卖出,这次卖出(即公式里的D - A - fee);而其他情况不值得交易(得不偿失或者根本没利润)。

    最新回复(0)