leetcode模拟类型题目汇总

219 阅读2分钟

用代码模拟实际场景,关键是通过计算机思维考虑清楚如何一步一步得到结果。

452. 用最少数量的箭引爆气球

image-20220505221125724.png 将气球数组排序后,用代码模拟射箭过程。需要判断怎么射最优。

那么如何判断呢?如果 points[i][0] >= points[i - 1][1] 则说明不重叠,需要弓箭数加一;

否则,说明两个气球重叠,那么再判断下一个气球是否与当前两个重叠。

如何判断呢?points[i + 1][0] < Math.min(points[i][1], points[i - 1][1])

56. 合并区间

image-20220506191739671.png

与上题类似。

406. 根据身高重建队列

image-20220505220530962.png 用代码模拟重建队列过程。遍历队伍,高个子先排,这样无论低个子如何排都不会影响高个子的权重。

因此需要首先按身高排序好。

860. 柠檬水找零

image-20220505221125724.png

遍历每一位顾客的购买柠檬水过程,判断手中的零钱是否足够找零。

如何判断呢?保存手中的钞票数量,如果顾客支付 10 元,那么需要一张 5 元钞票,不够则无法找零;

如果顾客支付 20 元,那么可以是 3 张 5 元钞票,也可以是 1 张 5 元和 1 张 10 元钞票,优先考虑包含 10 元的情况,因为 5 元钞票用途更广。

134. 加油站

image-20220505221632363.png

用代码模拟汽车行驶过程,在每一个站点判断汽油消耗是否足够到达下一个站点。

如何判断呢?如果当前汽油不足以支撑消耗(即 gas[i] - cost[i] < 0),那么表示无法继续行驶。

763. 划分字母区间

image-20220506195525803.png

对每一个字母判断它的 lastIndex,如果大于当前 lastIndex则更新 lastIndex,如果遍历到 lastIndex 位置,那么表示得到了一个完整的字母区间。

如何判断字母的 lastIndex 呢?先遍历一遍字符串,在 hash 表中保存好每个字母的 lastIndex。