记忆函数 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 
 */
相关推荐
我不吃饼干2 小时前
TypeScript 类型体操练习笔记(三)
前端·typescript
华仔啊2 小时前
除了防抖和节流,还有哪些 JS 性能优化手段?
前端·javascript·vue.js
CHU7290352 小时前
随时随地学新知——线上网课教学小程序前端功能详解
前端·小程序
清粥油条可乐炸鸡2 小时前
motion入门教程
前端·css·react.js
这是个栗子2 小时前
【Vue3项目】电商前台项目(四)
前端·vue.js·pinia·表单校验·面包屑导航
前端Hardy2 小时前
Electrobun 正式登场:仅 12MB,JS 桌面开发迎来轻量化新方案!
前端·javascript·electron
树上有只程序猿2 小时前
新世界的入场券,不再只发给程序员
前端·人工智能
confiself3 小时前
deer-flow前端分析
前端
刘宇琪3 小时前
Vite 生产环境代码分割与懒加载优化
前端