Skip to content

06-模拟 ​

模拟题是思路是相对来说是比较简单的,因为不需要思考思路,题目是会自动给出过程的。

但是在编写之前,一定要画图,不然会忽略一些细节,这就会导致一些问题会无从下手

题目 ​

LC1576.替换所有的问号 ​

这个题目只需要考虑一个细节就可以了:既在最左侧和最右侧的时候,需要考虑下标越界的情况

LC495. 提莫攻击 ​

这个只需要考虑这个细节就可以了:如何计算中间的中毒时间?

把意思转换一下,就是要我们求出这一次攻击的中毒的有效时长。

如果中毒的持续时间过短,那有效的时长就是 duration, 如果两个攻击时间的间隔过短,那么有效时长就是 timeSeries[i + 1] - timeSeries[i]. 因此是有效时长就是算这两个值的较小值

LC6. Z 字形变换 ​

这个可以根据题目,一步一步把题目给解出来,但是如果数据量过大的话,那么就需要优化

模拟题优化步骤(重要):

  1. 画图,把题目的情况画出来

    画图的时候可以使用下标来代替,而不是当前参数传入值的内容,因为下标是通用的,而值是会对推出规律起到干扰的作用的

  2. 根据图像,反推出一些规律
  3. 修改条件,看看这些规律能不能满足新的条件

这个题目就发现了这样的规律:

  1. 首行和尾行是相差的公差为 differ = 2 * numRows - 2
  2. 把画出来的结果看为一个 V, 计 V 的个数为 count,从 1 开始,那么每个 V 的中间每一行的下标之和就是 (2 * count - 1) * differ
用例 1/1
步骤: 0 / 0

当前动作:等待输入...

LC38. 外观数列 ​

这个题目也是一样,根据题目描述来编写算法就可以了

LC1419. 数青蛙 ​

思路:

  1. 创建一个 hash 表,key 是 c/r/o/a/k 这几个字符,而 val 是表示当前出现的个数
  2. 遍历字符串,获取到下标,将字符对应的 val 加 1
    • 如果是 c(第一个字符),那么就要判断一下 k 对应的值有没有,如果有,那么就要把它 减 1(就是把闲置的青蛙重新取出来,让它再叫,这样可以计算出最小的青蛙数量)
    • 如果不是 c,那么就要判断一下它的前置所对应的 val 是不是为 0, 如果是 0 那么是非法元素,直接返回 -1,如果不是,那么就要把前置内容减 1
  3. 在遍历完后,还需要判断一下有没有残留内容,如果有残留的,那么就要返回 -1,如果没有,那么就返回 key 所对应的 hash 值