30 天刷题计划(八)

题目来源: LeetCode 75 30 天 JavaScript 挑战

2623. 记忆函数

思路

闭包,声明一个 map 缓存参数和函数结果

代码

ts 复制代码
function memoize(fn: Fn): Fn {
  const cache = new Map()

  return function(...args) {
    const key = args.join(',')

    if (cache.has(key)) {
      return cache.get(key)
    }
    
    const val = fn(...args)
    cache.set(key, val)
    return val
  }
}

2723. 两个 Promise 对象相加

代码

ts 复制代码
async function addTwoPromises(promise1: P, promise2: P): P {
  return await promise1 + await promise2;
};

1207. 独一无二的出现次数

思路

先使用 Map 储存个数,再使用 Set 去重,最后判断他们的 size 是否相等

代码

ts 复制代码
function uniqueOccurrences(arr: number[]): boolean {
  const cache = new Map()
 
  for (let i = 0; i < arr.length; i++) {
    let n = arr[i]
    if (cache.has(n)) {
      cache.set(n, cache.get(n) + 1)
    } else {
      cache.set(n, 1)
    }
  }
  
  const values = Array.from(cache.values())
  const set = new Set(values)
  
  return cache.size === set.size
};

1657. 确定两个字符串是否接近

思路

将题目理解为判断两个字符串 "字符种类是否相同" 和 "字符频次是否相等",先判断字符种类是否相同,然后判断字符出现次数是否相同。

简单模拟题

代码

ts 复制代码
function closeStrings(word1: string, word2: string): boolean {
  const c1 = Array(26).fill(0)
  const c2 = Array(26).fill(0)

  for (let c of word1) {
    c1[c.charCodeAt(0) - 'a'.charCodeAt(0)]++
  }
  
  for (let c of word2) {
    c2[c.charCodeAt(0) - 'a'.charCodeAt(0)]++
  }

  for (let i = 0; i < 26; i++) {
    if (c1[i] + c2[i] === 0) {
      continue
    }
    if (c1[i] === 0 || c2[i] === 0) {
      return false
    }
  }

  c1.sort((a, b) => a - b)
  c2.sort((a, b) => a - b)

  for (let i = 0; i < 26; i++) {
    if (c1[i] !== c2[i]) {
      return false
    }
  }

  return true
};

2352. 相等行列对

思路

先用 Map 将矩阵的行统计次数,再遍历矩阵,将每一列与 Map 中的行对比求和。

代码

ts 复制代码
function equalPairs(grid: number[][]): number {
  const len = grid.length
  const map = new Map()

  for(let row of grid) {
    const rowStr = row.toString()
    map.set(rowStr, map.get(rowStr) ? map.get(rowStr) + 1 : 1)
  }

  let count = 0

  for (let j = 0; j < len; j++) {
    const arr = []

    for (let i = 0; i < len; i++) {
      arr.push(grid[i][j])
    }
    
    const arrStr = arr.toString()

    if (map.has(arrStr)) {
      count += map.get(arrStr)
    }
  }
  
  return count
};

本文完。

相关推荐
A向前奔跑18 小时前
前端实现实现视频播放的方案和面试问题
前端·音视频
十一.36619 小时前
131-133 定时器的应用
前端·javascript·html
leo__52019 小时前
基于两步成像算法的聚束模式SAR MATLAB实现
开发语言·算法·matlab
xhxxx19 小时前
你的 AI 为什么总答非所问?缺的不是智商,是“记忆系统”
前端·langchain·llm
前端小白在前进20 小时前
力扣刷题:在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·leetcode
38242782720 小时前
python:输出JSON
前端·python·json
2503_9284115620 小时前
12.22 wxml语法
开发语言·前端·javascript
光影少年21 小时前
Vue2 Diff和Vue 3 Diff实现及底层原理
前端·javascript·vue.js
傻啦嘿哟21 小时前
隧道代理“请求监控”实战:动态调整采集策略的完整指南
前端·javascript·vue.js
JIngJaneIL21 小时前
基于java + vue个人博客系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot