1.4k 1 分钟

单调队列是一种特殊的队列结构,用于解决滑动窗口类问题,尤其是那些涉及到在滑动窗口内寻找最大值或最小值的问题。与单调栈类似,单调队列内部的元素也保持一个单调递增或单调递减的顺序。通过维护这种单调性,单调队列能够在 O (1) 时间复杂度内给出窗口内的最大值或最小值,从而使得整个问题的时间复杂度降低。 #...
1.3k 1 分钟

单调栈是一种特殊的栈结构,用于解决一类特定的问题,比如寻找数组中元素的下一个更大元素或者下一个更小元素。它的特点是在栈中保持元素单调递增或单调递减。使用单调栈的目的主要是为了快速查找到某个元素左边或右边第一个比它大(或小)的元素。 #...
1.7k 2 分钟

"空间换时间" 是一种常见的算法优化策略,其核心思想是通过增加额外的空间消耗(例如,使用辅助数据结构)来减少算法的执行时间。这种策略在需要大量重复计算或者在查找和访问操作中寻求高效率时特别有用。下面我将通过几个例子来具体说明这一策略的应用。 # 1. 使用哈希表优化查找操作 在处理查找问题时,如果直接遍历数组或列表来查找元素,时间复杂度通常为 O (n)。通过使用哈希表(在 C++ 中通常使用 unordered_map 或 unordered_set ),可以将查找操作的时间复杂度降低到 O (1)。 # 示例代码: #include...
2.5k 2 分钟

双指针技巧是一种常用的算法优化方法,主要用于处理数组或链表等线性结构的问题。它通过定义两个指针(或索引),并以不同的策略移动这两个指针,来达到减少时间复杂度、简化问题解决过程的目的。根据具体问题和解题策略的不同,双指针技巧大致可以分为以下几类: # 快慢指针 快慢指针主要用于解决链表中的问题,如检测环、寻找环的入口、寻找链表的中点等。在这种策略中,两个指针从同一位置出发,一个以快速移动(例如,每次移动两步),另一个以慢速移动(例如,每次移动一步)。通过比较快慢指针的相对速度,我们可以得到一些有用的信息。 检测链表中的环 #include <iostream>using...
1.8k 2 分钟

# 整除的基本知识 给定一个正整数 n,求 1 到 n 中能够被 3 或 5 整除的所有整数之和。 #include <iostream>using namespace std;int main() { int n; cin >> n; int sum = 0; for (int i = 1; i <= n; i++) { if (i % 3 == 0 || i % 5 == 0) { sum += i; } } cout <<...
928 1 分钟

# 加法原理与乘法原理 在组合数学和概率论中,加法原理和乘法原理是两个基本的计数原理,用于计算事件的可能性。 加法原理(也称为求和原理): 加法原理用于计算两个事件的并集的可能性。如果事件 A 可以发生的方式有 m 种,事件 B 可以发生的方式有 n 种,且这两个事件不可能同时发生,那么事件 A 或 B 发生的方式总共有 m + n 种。 例如,从一个红色和一个蓝色袋子中选取一个球,红袋子中有 3 个球可选,蓝袋子中有 4 个球可选,那么总共有 3 + 4 = 7 种可能的选球方式。 乘法原理(也称为积法则): 乘法原理用于计算两个事件的交集的可能性。如果事件 A 可以发生的方式有 m...
3.8k 3 分钟

# 各种进制 #include <iostream> #include <string> using namespace std; // 十进制转其他进制 string decimalToBase(int n, int base) { string digits = "0123456789ABCDEF"; // 可根据需要扩展到更多进制 string result = ""; while (n > 0) { int...
4.4k 4 分钟

# 图的概念与建立 图是数学和计算机科学中的一个基本概念,用于表示物件(顶点或节点)之间的关系(边)。图可以用来模拟现实世界中的许多类型的关系,比如社交网络中的人际关系、城市间的道路网络、网页之间的链接等。 # 图的基本概念 顶点(Vertex):图中的一个节点,可以表示一个实体。 边(Edge):连接两个顶点的线,可以是有向的(箭头指向某一方向,表示关系的方向)或无向的(没有箭头,表示双向关系)。 路径(Path):顶点的一个序列,其中任意两个连续的顶点之间都通过边相连。 循环(Cycle):起点和终点相同的路径。 连通图(Connected...
925 1 分钟

# 并叉集 # Hash 集 哈希集(Hash Set)是基于哈希表实现的一种数据结构,主要用于存储不重复的元素集合。它提供了高效的元素查找、插入和删除操作。哈希集的核心思想是使用一个哈希函数将集合中的每个元素映射到哈希表的一个位置(称为 “槽” 或 “桶”),以便快速访问。 # 哈希集的特点 唯一性:哈希集中不允许存储重复的元素。 无序性:元素在哈希集中的存储位置是根据哈希函数计算得出的,因此元素的存储顺序并不是按照插入顺序排列的。 高效性:在理想情况下,哈希集可以提供接近常数时间复杂度的元素查找、插入和删除操作。 #...