上岸算法LeetCode Weekly Contest 286解题报告

【 NO.1 找出两数组的不同】

解题思路
可以使用 sort + binary search 求差集。

代码展示

【 NO.2 美化数组的最少删除数】

解题思路
从左到右遍历即可。

代码展示

【 NO.3 找到指定长度的回文数】

解题思路
举个例子:长度为 6 的第 k 大的回文数的前半边其实就是 100 + k - 1,由前半边复制出后半边即可。

奇数长度的回文数在复制出后半边前去掉末尾数即可。

代码展示


【 NO.4 从栈中取出 K 个硬币的最大面值和】

解题思路
典型的动态规划问题。

定义状态:dp[i][j] 表示前 i 个栈取 j 次得到的最大和。

状态转移:在第 i 个栈取几个,即 dp[i][j] = max{dp[i-1][j-t] + sum(i, t)},其中 sum(i, t) 表示在第 i 个栈取 t 个硬币得到的和。