列表

详情


2805. 自定义间隔

函数 customInterval

给定一个函数 fn、一个数字 delay 和一个数字 period,返回一个数字 idcustomInterval 是一个函数,它应该根据公式 delay + period * count 在间隔中执行提供的函数 fn,公式中的 count 表示从初始值 0 开始执行间隔的次数。

函数 customClearInterval

给定 idid 是从函数 customInterval 返回的值。customClearInterval 应该停止在间隔中执行提供的函数 fn

 

示例 1:

输入:delay = 50, period = 20, stopTime = 225
输出:[50,120,210]
解释:
const t = performance.now()  
const result = []
        
const fn = () => {
    result.push(Math.floor(performance.now() - t))
}
const id = customInterval(fn, delay, period)
        
setTimeout(() => {
    customClearInterval(id)
}, 225)

50 + 20 * 0 = 50 // 50ms - 第一个函数调用
50 + 20 * 1 = 70 // 50ms + 70ms = 120ms - 第二个函数调用
50 + 20 * 2 = 90 // 50ms + 70ms + 90ms = 210ms - 第三个函数调用

示例 2:

输入:delay = 20, period = 20, stopTime = 150
输出:[20,60,120]
解释:
20 + 20 * 0 = 20 // 20ms - 第一个函数调用
20 + 20 * 1 = 40 // 20ms + 40ms = 60ms - 第二个函数调用
20 + 20 * 2 = 60 // 20ms + 40ms + 60ms = 120ms - 第三个函数调用

示例 3:

输入:delay = 100, period = 200, stopTime = 500
输出:[100,400]
解释:
100 + 200 * 0 = 100 // 100ms - 第一个函数调用
100 + 200 * 1 = 300 // 100ms + 300ms = 400ms - 第二个函数调用

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
/** * @param {Function} fn * @param {number} delay * @param {number} period * @return {number} id */ function customInterval(fn, delay, period){ } /** * @param {number} id * @return {void} */ function customClearInterval(id) { }

typescript 解法, 执行用时: 76 ms, 内存消耗: 42.6 MB, 提交时间: 2023-10-15 13:25:45

const aliveIntervals = new Set<number>();

function customInterval(fn: Function, delay: number, period: number): number {
  const intervalId = aliveIntervals.size;
  aliveIntervals.add(intervalId);
  runInterval(intervalId, fn, delay, period);
  return intervalId;
}

function customClearInterval(intervalId: number): void {
  aliveIntervals.delete(intervalId);
}

function runInterval(intervalId: number, fn: Function, delay: number, period: number, count = 0): void {
  setTimeout(() => {
    if (!aliveIntervals.has(intervalId)) {
      return;
    }
    fn();
    runInterval(intervalId, fn, delay, period, count + 1);
  }, delay + period * count);
}

上一题