【 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 算法求最短路即可。
代码展示