温叶博客

温叶博客

分类 计算机基础 下的文章

扁平化数组

扁平化数组就是将一个多层的数组拍扁,比如[1, [2, [3, [4, 5]]], 6]拍成[1, 2, 3, 4, 5, 6]。递归写法这个没啥难度,就是定义一个结果数组,然后循环原数组,如果元素是数组则递归。function _flat(nestNums: Array<number[] | number>, flatNums: number[] = []) { for (...

带并发限制的异步调度器

题目分析这道题的特点就是限制了同时执行的并发数目,如果一个任务完成了就取剩下的任务继续执行。我们就可以很容易的想到,定义一个队列,将一时间执行不了的任务先放到任务队列中存着呗,等之前任务执行完再取一个执行,以此类推直至队列执行完。需要注意到的难点是add方法是会返回一个promise的,但是任务啥时候执行到是不确定的,因此这里实现方法就是将返回promise的resolve方法传递给任务本身...

Trie树/字典树

介绍Tire树又称字典树/前缀树,具有如下特点根节点不包含字符 除根节点外每个节点只包含一个字符树的每一个路径都是一个字符串每个节点的子节点包含的字符都不相同用途利用字符串的公共前缀来降低查找的时间,常用于搜索系统文本词频统计实现type TrieMap = { [key: string]: any; } & { isEnd?: boolean }; class Trie { ...

双栈实现队列

题目介绍请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false解题思路栈有个特...

双队列实现栈

题目介绍请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。实现思路队列有个...