摘要:
浏览器渲染路径,先构建 DOM 树,再构建 CSSOM 树,DOM 树再与 CSSOM 树合并为渲染树,之后再进行布局、绘制,完成渲染过程。 其中,html、css、js 的加载都会影响页面的渲染速度,而渲染树必备要素为 html 和 css ,所以要尽可能让他们提前渲染,js 则尽可能滞后加载。 阅读全文
摘要:
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例 1: 输入:l1 = [2,4,3], l2 = [5,6 阅读全文
摘要:
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。 示例 1: 输入: num = 38输出: 2 解释: 各位相加的过程为:38 --> 3 + 8 --> 1111 --> 1 + 1 --> 2由于 2 是一位数,所以返回 2。示例 1: 输入: num = 阅读全文
摘要:
原题链接 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。 示例 1: 输入:num1 = "11", num2 = "123"输出:"134" 阅读全文
摘要:
LFU 算法 /** * @param {number} capacity */ var LFUCache = function (capacity) { this.map = new Map();// 存放 key:node 的索引,便于快速访问节点 this.freqArr = new Arra 阅读全文
摘要:
// pid 代表属于的父级 id // id 代表的是自己本身的id,本身的 id 是多少 let flatArr = [ { id: 1, name: "部门1", pid: 0 }, { id: 2, name: "部门2", pid: 1 }, { id: 3, name: "部门3", p 阅读全文
摘要:
实现一个简单版本 Vue,仅实现了 数据响应式、依赖收集、compile编译中的html和文本编译,起名为nvue,即新 vue。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X 阅读全文
摘要:
参考: https://blog.csdn.net/nanxun201314/article/details/117451442 https://zhuanlan.zhihu.com/p/368238830 源码分析参考 阅读全文
摘要:
// 计数排序 // 稳定性:稳定 // 定义一个数组,将数组中每个元素出现的次数以数组形式保存起来,数组索引值即为具体 key,数组索引对应的元素值即为该索引值出现的次数 // 再将保存起来的次数的数字依次放入原数组 function countingSort(arr, maxValue) { l 阅读全文
摘要:
// 快速排序 // 快速排序基本思路, 通过遍历,找到一个基准值,遍历一趟后,将所有比基准值小的放在基准值左边,比基准值大的放在基准值右边,这时候基准值就是一个排好序的数,再将基准值两边的数组分别调用此方法递归,最终生成有序数列 // 1.左右指针交换法 // 左右指针对向前进,当遇到左侧指针所指 阅读全文
摘要:
// 插入排序的原理: // 一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。 // 插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、长度数增 1 的有序表。在其实现过程使用双层循环,外层循环从第二个元素开始遍历,代表执行多少 阅读全文
摘要:
// 选择排序 // 原理:进行 n-1 趟 循环,每趟循环中遍历所有未排好序的数,第一趟循环,从第0个元素开始向后遍历,找到 最小的元素,与第1 一个元素进行交换,第二趟,从第 1 个元素开始向后遍历,找到最小值与第2个元素 进行交换,以此类推 // 从而得出规律,每次遍历元素开始位置为 i+1, 阅读全文
摘要:
// 冒泡排序 // 原理就是每一轮循环,将一个最大的值冒泡到最后 // 1.每一趟都是比较相邻两个元素,如果前一个元素大于后一个,则交换两个元素 // 2.第一趟从第一个元素开始进行交换,最后一个元素不参与交换,第二趟最后两个元素不参与交换......以此类推,所以第二层循环要将数组的长度-1-i 阅读全文
摘要:
js 创建二维数组的方法: 方法一: 直接设置 let arr = [ [1, 2], [3, 4], [5, 6], ]; let arr = [] ; arr[0] = [1,2,3,4,5,6]; arr[1] = [10,20,30,40,50,60] 方法二: fill + 一个 for 阅读全文
摘要:
给定一个长度为 n 的链表 head 对于列表中的每个节点,查找下一个 更大节点 的值。也就是说,对于每个节点,找到它旁边的第一个节点的值,这个节点的值 严格大于 它的值。 返回一个整数数组 answer ,其中 answer[i] 是第 i 个节点( 从1开始 )的下一个更大的节点的值。如果第 i 阅读全文
摘要:
方式一: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) { // 循环遍历,将所有左节点 阅读全文
摘要:
// 解析获取的 url 中的参数为对象 function parseQueryString(url) { if (!url) { return {}; } const qsArr = decodeURIComponent(url).split("?")[1].split("&"); return 阅读全文