记忆函数 II 题解

题目链接

2630. 记忆函数 II - 力扣(LeetCode)

思路

题目所提到 === 相等才给出缓存的结果,那么我们用 hash 的想法,给每个参数记录下来

=== 对于简单数据类型 ------ 值相等 ,类型相等即可 对于复杂数据类型 ------ 需要是指向同一个对象

这里采取的 hash 是拿 map 的 size 进行记录到 idPool 这个map里面,表示参数是否已经记录过了

最后 我们给 传递进来的参数 hash 在 代码里面也就是 getId 一下,拼接对应的 id 成一个 字符串即可

题解

javascript 复制代码
/**
 * @param {Function} fn
 * @return {Function}
 */
function memoize(fn) {

    let cache = new Map()
    let idPool = new Map()

    function getId(obj) {
        if (idPool.has(obj)) {
            return idPool.get(obj)
        }
        let id = idPool.size
        idPool.set(obj, id)
        return id
    }

    return function () {
        const key = Object.values(arguments).map(getId).join('-')

        if (cache.has(key)) {
            return cache.get(key)
        }

        let value = fn.apply(this, Object.values(arguments))
        cache.set(key, value)
        return value
    }
}


/** 
 * let callCount = 0;
 * const memoizedFn = memoize(function (a, b) {
 *	 callCount += 1;
 *   return a + b;
 * })
 * memoizedFn(2, 3) // 5
 * memoizedFn(2, 3) // 5
 * console.log(callCount) // 1 
 */
相关推荐
凌云拓界7 分钟前
联网能力:让AI看见更广阔的世界 ——CogitoAgent开发实战(四)
javascript·人工智能·架构·node.js·创业创新
JustHappy1 小时前
古法编程秘籍(六):程序到底是怎么跑起来的?从 IO 到中断,一次讲明白
前端·后端·全栈
HYCS1 小时前
用pixi.js实现fabric.js(六):从线性代数的角度理解编辑器交互
前端·javascript·canvas
卷帘依旧2 小时前
useImperativeHandle的作用
前端
卷帘依旧2 小时前
Hooks在Fiber上的存储原理
前端
you45802 小时前
学成在线--day02 CMS前端开发(含Vue基础知识得回顾)
前端·javascript·vue.js
想吃火锅10052 小时前
【leetcode】1.两数之和js版
javascript·算法·leetcode
xiaofeichaichai2 小时前
虚拟 DOM
前端·javascript·vue.js
2401_878454532 小时前
前端高频得手写题
前端