随笔分类 - 算法
摘要:方式一:map实现 class LRU { constructor(size) { this.size = size; this.cache = new Map(); } get(key) { if (this.cache.has(key)) { const value = this.cache.g
阅读全文
摘要:二叉树的右侧视图,使用层序遍历实现,需要先获取带有层级的二维数组,再将数组中每个数组的最后一个值获取到,即为右侧视图。 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4]输出:
阅读全文
摘要:/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val undefined ? 0 : val) * this.left = (left undefined
阅读全文
摘要:var inorderTraversal = function (root) { // 迭代 if (!root) { return []; } let res = []; let stack = []; while (stack.length > 0||root) { // 循环遍历,将所有左节点
阅读全文
摘要:var postorderTraversal = function (root) { // 迭代,前序遍历是根左右,后序为左右根,将前序实现为根右左,再将数组反转即得后序遍历,左右根 // if (!root) { // return []; // } // let res = []; // let
阅读全文
摘要:递归要比迭代更耗时一些。 // 前序遍历:根左右 // 中序遍历:左根右 // 后序遍历:左右根 var preorderTraversal = function (root) { if (!root) { return []; } // 迭代 let res = []; let stack = [
阅读全文
摘要:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下: F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得
阅读全文
摘要:// 剑指 Offer II 077. 链表排序 /** * @param {ListNode} head * @return {ListNode} */ var sortList = function (head) { // 1. 首先判断当前链表不存在 ,或链表只有一个节点,则直接返回 head
阅读全文
摘要:归并排序使用分而治之的概念对给定的元素列表进行排序。它将问题分解为较小的子问题,直到它们变得足够简单以至可以直接解决为止。 以下是归并排序的步骤: 1、将给定的列表分为两半(如果列表中的元素数为奇数,则使其大致相等)。 2、以相同的方式继续划分子数组,直到只剩下单个元素数组。 3、从单个元素数组开始
阅读全文
摘要:// 桶排序 // 公式 // 桶的数量 = ((最大值 - 最小值)/ 数组长度) + 1 // 元素所属桶的位置 =( 元素大小 - 最小值)/ 数组长度 function bucketSort(arr) { let min = Math.min(...arr); let max = Math.
阅读全文
摘要:// 1.两数之和 // set 存每一位被需要的值,作为key , 值为当前位置的 index // 然后继续遍历下一位,判断下一位是否就是已经存起来的被需要的值 // 如果是,则直接返回当时被需要时那一位的索引 及 当前索引 function sum(nums, target) { let ma
阅读全文
摘要:归并排序是一个O(nlogn)的算法,其基本思想就是一个分治的策略,先进行划分,然后再进行合并,下面举个例子。有这样一组数据: [5,4,1,22,12,32,45,21] 如果对它进行归并排序的话,首先将它从中间分开,这样,它就被分成了两个数组: [5,4,1,22]与 [12,32,45,21]
阅读全文