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

【 NO.1 重排字符形成目标字符串】

解题思路

统计每种字符的数量,原字符串和目标字符串的对应字符数量之比的最小值即答案。

代码展示

【 NO.2 价格减免】

解题思路

按照题意要求解析字符串、计算即可。注意一个 corner case: 单一个 $ 也是单词。

代码展示

【 NO.3 使数组按非递减顺序排列】

解题思路

动态规划 + 单调栈。

dp[i] 表示将 i 移除需要操作多少次,若 i 最终不会被移除则 dp[i] = inf

维护一个单调递减的栈,当前元素入栈时,会有一些元素 (假设为 X) 被它弹出。

若当前元素入栈前所有元素都会被弹出,说明这个元素就是最大的,不会被删除。否则,它最终将会被当时的栈顶删除,而具体会在第几次被删除,取决于 X 需要经过多少轮才被删除,取 max{dp[x]}

代码展示

【 NO.4 到达角落需要移除障碍物的最小数目】

解题思路

最短路。每两个相邻的点之间连边,如果目标点为障碍物,则边权为 1,否则为 0。用 dijkstra 算法求最短路即可。

代码展示