JavaScript-Algorithms
JavaScript-Algorithms copied to clipboard
基础理论+JS框架应用+实践,从0到1构建整个前端算法体系
设计一个支持 `push` ,`pop` ,`top` 操作,并能在常数时间内检索到最小元素的栈。 - `push(x)` —— 将元素 x 推入栈中。 - `pop()` —— 删除栈顶的元素。 - `top()` —— 获取栈顶元素。 - `getMin()` —— 检索栈中的最小元素。 **示例:** ```js MinStack minStack = new MinStack();...
给定一个字符串,逐个翻转字符串中的每个单词。 **示例 1:** ``` 输入: "the sky is blue" 输出: "blue is sky the" ``` **示例 2:** ``` 输入: " hello world! " 输出: "world! hello" 解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。 ``` **示例...
**示例:** ```js 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL ``` **进阶:** 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 附leetcode地址:[leetcode](https://leetcode-cn.com/problems/reverse-linked-list/solution/tu-jie-leetcodefan-zhuan-lian-biao-by-user7746o/)
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 `get` 和写入数据 `put` 。 获取数据 `get(key)` - 如果密钥 ( `key` ) 存在于缓存中,则获取密钥的值(总是正数),否则返回 `-1` 。 写入数据 `put(key, value)` - 如果密钥不存在,则写入数据。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据,从而为新数据留出空间。 **进阶:** 你是否可以在 **O(1)** 时间复杂度内完成这两种操作? **示例:** ```js...
给定两个数组,编写一个函数来计算它们的交集。 **示例 1:** ```js 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] ``` **示例 2:** ```js 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [9,4] ``` **说明:** 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。...
关于 `Array` 的属性、方法这里不再做介绍,详看 [MDN Array](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array) 。 面试题: > 已知如下数组:var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ]...
给定一个只包括 `'('` ,`')'` ,`'{'` ,`'}'` ,`'['` ,`']'` 的字符串,判断字符串是否有效。 有效字符串需满足: - 左括号必须用相同类型的右括号闭合。 - 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 **示例 1:** ```js 输入: "()" 输出: true ``` **示例 2:** ```js 输入: "()[]{}" 输出: true ```...
数组去重的方式有很多,我们可以使用 Set 去重、filter 过滤等,详见 [携程&蘑菇街&bilibili:手写数组去重、扁平化函数](https://mp.weixin.qq.com/s/NGl9nBkIruuzYkxqyPnB1A) ,但三种解法(Set、filter、reducer)都产生了新数组: > MDN : `filter()` 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。 那么我们如何在不产生性数组的情况下删除数组中的重复元素喃? ### 方式一:排序去重 > MDN:`sort()` 方法用[原地算法](https://en.wikipedia.org/wiki/In-place_algorithm)对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的 ```js const removeDuplicates = (nums) => { // 原地排序 nums.sort() // 去重...
[Async是如何被 JavaScript 实现的](https://mp.weixin.qq.com/s/P_DPkH72_1bdOl78M_ISsQ) await 内部实现了 generator,其实 await 就是 generator 加上 Promise的语法糖,且内部实现了自动执行 generator。如果你熟悉 co 的话,其实自己就可以实现这样的语法糖。 ```js /** * async/await 实现 * @param {*} generatorFunc */ function asyncToGenerator(generatorFunc) { // 返回的是一个新的函数 return...
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 **示例 1:** ``` 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] ``` **示例 2:** ``` 输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出:[1,2,3,4,8,12,11,10,9,5,6,7] ``` **限制:** - `0