链表23. 合并 K 个升序链表 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 1234567891011121314151617181920212223242526272829303132333435363738394041424344/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } *//** * @param {ListNode[]} lists * @return {ListNode} */var mergeKLists = function(lists) { if(!lists||lists.length===0){ return ...
SetJavaScript中的Set是一种内建的数据结构,类似于数组,但具有以下几个特点: 元素唯一性:Set中的每个元素都是唯一的,不允许重复。 顺序性:元素按插入顺序排序。 可迭代性:Set是可迭代的,可以使用for...of进行遍历。 值类型:Set只关心元素的值是否相等,而不关心其类型。 创建一个Set1let mySet = new Set(); 可以通过传入一个可迭代对象来初始化一个Set。 12let numbers = new Set([1, 2, 3, 4]);console.log(numbers); // Set { 1, 2, 3, 4 } 元素唯一性Set 中的所有元素都是唯一的,不能重复。例如: 12const mySet = new Set([1, 2, 2, 3]);console.log(mySet); // 输出:Set(3) { 1, 2, 3 } 可以接受可迭代对象(例如数组)作为参数创建 Set 时,可以直接将一个数组或其他可迭代对象传入: 123const numbers = [1, 2, ...
Map map 的全部方法 方法 说明 构造函数 创建 map 容器,支持多种初始化方式。 empty() 检查容器是否为空。 size() 返回容器中元素的数量。 clear() 清空容器中的所有元素。 insert() 插入单个元素或范围。 erase() 按键或迭代器删除元素。 find() 查找指定键的迭代器。 count() 返回指定键的数量(始终为 0 或 1)。 at() 访问指定键对应的值,不存在时抛出异常。 operator[] 访问或插入指定键的值。 swap() 交换两个 map 容器的内容。 lower_bound() 返回第一个不小于指定键的迭代器。 upper_bound() 返回第一个大于指定键的迭代器。 equal_range() 返回一对迭代器,表示键的范围。 emplace() 原地构造并插入元素。 key_comp() 返回键比较函数对象。 value_comp() 返回值比较函数对象。 1. 添加和删除元素的方法1.1 insert 功能:在 map 中插入键值对。 ...
二叉排序树一、二叉排序树的定义 性质: 对于每个节点 N,满足: 若左子树不为空,则左子树中所有节点的值均小于 N 的值。 若右子树不为空,则右子树中所有节点的值均大于 N 的值。 左右子树本身也必须是二叉排序树。 特点: 中序遍历的结果是一个升序排列的序列。 数据存储动态且可扩展,适合频繁的插入、删除和查找操作。 二、二叉排序树的基本操作1. 定义节点结构二叉排序树的节点通常包括数据值和左右子树指针: 1234567struct TreeNode { int value; // 节点的值 TreeNode* left; // 指向左子树的指针 TreeNode* right; // 指向右子树的指针 TreeNode(int val) : value(val), left(nullptr), right(nullptr) {}}; 2. 插入节点插入节点时递归定位插入位置,保持二叉排序树的性质: 12345678TreeNode* inser ...
一、概念与原理分块查找(Block Search),又称为索引顺序查找,是对顺序查找的优化。其核心思想是将数据划分成若干“块”,通过构建每块的索引表来快速定位目标数据所在的块,再在对应的块中顺序查找目标值。 二、算法特点 适用场景: 数据量较大,且查询频繁。 数据较为稳定(修改较少)。 优势: 提高查找效率:先通过索引缩小范围,再在小范围内查找。 易于实现,结构简单。 劣势: 动态更新数据时,重新构建索引的开销较大。 三、算法实现步骤1. 数据分块将数据按照一定规则划分为若干块: 每块的数据可以是连续的。 每块的数据数量相同或接近。 数据可以按照大小排序(便于构建索引)。 2. 构建索引为每块构建索引表,索引存储以下信息: 每块的范围(例如,块的最大值)。 每块的起始位置(方便快速访问)。 3. 查找流程 索引查找:利用索引定位目标值所在块。 块内查找:在定位的块内,顺序查找目标值。 四、算法时间复杂度 构建索引:O(n)O(n)O(n) (只需遍历数据一次)。 查找时间: 索引查找:O(n)O(\sqrt{n})O(n) (如果块数是 n\sqrt{n} ...
JavaScript
未读JavaScript常用小知识 一.Number.MAX_SAFE_INTEGER 在 JavaScript 中,Number.MAX_SAFE_INTEGER 是一个常量,表示 JavaScript 中能够安全表示的最大整数值,其值为 9007199254740991。这是因为 JavaScript 的数字是基于 IEEE 754 双精度浮点数(64 位),安全整数范围是从 −253+1-2^{53} + 1−253+1 到 253−12^{53} - 1253−1。超出这个范围的整数可能会导致精度丢失。 1let minDiff = Number.MAX_SAFE_INTEGER; 总结 通过使用 Number.MAX_SAFE_INTEGER 初始化变量,开发者确保了在后续比较中,所有合法的差值都会比初始值小,从而正确更新 minDiff。 二.解构赋值 1. 解构赋值基础解构赋值是一种从数组或对象中提取值,并将其赋值给变量的语法。 数组的解构赋值123let arr = [1, 2, 3];let [a, b] = arr;console.log(a, b); // 输出: ...
MapMap 是 JavaScript 中的一种新型数据结构,它存储键值对(key-value pairs),与对象类似,但具有更多的特性和更高的灵活性。Map 是 ES6 引入的,它的键可以是任何数据类型,而对象的键只能是字符串或符号(虽然它们会被自动转换为字符串)。以下是 Map 的详细用法及其相关知识点: 1. 创建 Map你可以使用 new Map() 来创建一个空的 Map 实例,或者传入一个二维数组来初始化它。 123456789// 创建一个空的 Mapconst map1 = new Map();// 创建并初始化 Mapconst map2 = new Map([ ['name', 'John'], ['age', 30], ['country', 'USA']]); 2. Map 常用方法2.1 set(key, value)set 方法用于将一个键值对添加到 Map 中。如果键已存在,则更新该键的值。 1234const map = new Map();ma ...
Math基础概述Math 是 JavaScript 的内置对象,提供数学常数和函数。Math 不像其他对象那样可以构造实例,它是全局对象,所有方法直接通过 Math 调用。 常用的数学常量 Math.PI表示圆周率(π)。值: 3.141592653589793 1console.log(Math.PI); // 3.141592653589793 Math.E表示自然对数的底数(e)。值: 2.718281828459045 1console.log(Math.E); // 2.718281828459045 Math.LN2表示 2 的自然对数。值: 0.6931471805599453 Math.LN10表示 10 的自然对数。值: 2.302585092994046 Math.LOG2E表示以 2 为底的 e 的对数。值: 1.4426950408889634 Math.LOG10E表示以 10 为底的 e 的对数。值: 0.4342944819032518 Math.SQRT2表示 2 的平方根。值: 1.4142135623730951 Math.SQRT1 ...
Promise Promise 概述Promise 是 JavaScript 中用于处理异步操作的对象,它代表了一个未来某个事件(通常是一个异步操作)最终完成或失败的状态。通过使用 Promise,可以优化回调函数的嵌套结构,使异步流程更加清晰和可维护,并提供了错误处理机制。 1. 基本概念定义 Promise 是一个表示未来某个事件(通常是一个异步操作)最终完成或失败的对象。 特点 状态:一旦状态改变,就不会再变。Promise 对象的状态有以下三种: Pending(待定):初始状态,既未完成也未失败。 Fulfilled(已完成):操作成功完成。 Rejected(已失败):操作失败。 状态只能从 pending 变为 fulfilled 或 rejected。 核心作用 优化回调函数的嵌套结构:避免“回调地狱”问题。 使异步流程更清晰和可维护:通过链式调用实现异步代码的顺序执行。 提供错误处理机制:统一管理异步操作中的错误。 2. Promise 的语法2.1 创建一个 Promise1234567const promise = new Promise((reso ...
1.this在 JavaScript 中,数组是对象,所有对象都从它们的原型继承属性和方法。原型是一种用作创建其他对象基础的“模板对象”。 内置的 push() 方法,它可以将新的项添加到数组的末尾并返回新的长度。这个方法是 Array 原型的一部分,对 JavaScript 中的所有数组都可用. 12console.log(Array.prototype.hasOwnProperty('push')); // 这将返回 true,因为数组有 push 方法arr.push(4); // 现在 arr 是 [1, 2, 3, 4] 现在,如果你想向所有数组添加一个新的方法,例如 last(),你可以将它添加到 Array 原型中: 123Array.prototype.last = function() { // 这里放置 last 方法的实现}; 扩展内置原型,如 Array 的原型,可能会有潜在风险,因为如果你的方法名称与未来的 JavaScript 更新或其他库的方法名称冲突,可能会导致意想不到的行为。例如,考虑尝试覆盖 Array ...