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); // 输出: 1 2 ...
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 ...
二叉树二叉树的定义:123456789/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } *//** 二叉树的直径 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 1234567891011121314151617181920212223242526/** * Definition for a binary tree node. * function TreeNode(val, left, right) ...
哈希表594. 最长和谐子序列 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 给你一个整数数组 nums ,请你在所有可能的 子序列 中找到最长的和谐子序列的长度。 数组的 子序列 是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。 123456789101112131415161718192021/** * @param {number[]} nums * @return {number} */var findLHS = function(nums) { let newmap = new Map() for(let i=0;i<nums.length;i++){ if(newmap.has(nums[i])){ newmap.set(nums[i],newmap.get(nums[i])+1) }else{ newmap.set(num ...